将选择结果传递到存储过程中的插入

发布于 2024-10-12 08:12:25 字数 731 浏览 1 评论 0原文

我正在尝试创建一个 SP,它将根据提供的 ArticleTypeName 从另一个表中找到 ArticleType(pkey 我忘了在其上添加 ID),并使用它插入到类别表中的新类别中。最后,新行的 ID 在输出参数中发回。我认为一切都是正确的,但我不断收到错误消息,指出“插入”周围的语法不正确。我确信我错过了一些非常简单的东西!

 ALTER PROCEDURE InsertCategory
        @ParentCatID int,
        @CategoryName varchar(25),
        @ArticleTypeName varchar(15),
        @NewCategoryID int OUTPUT

    AS
    BEGIN
    DECLARE @ArticleType int

    SELECT @ArticleType=ArticleType
    FROM (
        SELECT TOP 1 ArticleType FROM ArticleTypes
        WHERE (ArticleTypeName=@ArticleTypeName))

    INSERT INTO Categories (ParentCatID, CategoryName, ArticleType) VALUES (@ParentCatID, @CategoryName, @ArticleType)

    SET @NewCategoryID = Scope_Identity()
    END

I'm trying to make a SP that will find the ArticleType (pkey I forgot to put ID on it) from another table based on the ArticleTypeName supplied and use that to insert into the new category in the categories table. Finally the new row's ID is sent back in an output param. I thought everything was correct but I keep getting an error stating that the syntax is incorrect around 'Insert'. I'm sure I'm missing something really simple!

 ALTER PROCEDURE InsertCategory
        @ParentCatID int,
        @CategoryName varchar(25),
        @ArticleTypeName varchar(15),
        @NewCategoryID int OUTPUT

    AS
    BEGIN
    DECLARE @ArticleType int

    SELECT @ArticleType=ArticleType
    FROM (
        SELECT TOP 1 ArticleType FROM ArticleTypes
        WHERE (ArticleTypeName=@ArticleTypeName))

    INSERT INTO Categories (ParentCatID, CategoryName, ArticleType) VALUES (@ParentCatID, @CategoryName, @ArticleType)

    SET @NewCategoryID = Scope_Identity()
    END

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夏末染殇 2024-10-19 08:12:25

子查询需要别名。例如,这会给出错误:

select * from (select id from MyTable)

但这会起作用:

select * from (select id from MyTable) as SubQueryAlias

因此,在您的情况下,请在此时添加别名:

FROM (
        SELECT TOP 1 ArticleType FROM ArticleTypes
        WHERE (ArticleTypeName=@ArticleTypeName)) as SubQueryName;

A subquery requires an alias. For example, this will give an error:

select * from (select id from MyTable)

But this will work:

select * from (select id from MyTable) as SubQueryAlias

So in your case, add the alias at this point:

FROM (
        SELECT TOP 1 ArticleType FROM ArticleTypes
        WHERE (ArticleTypeName=@ArticleTypeName)) as SubQueryName;
戈亓 2024-10-19 08:12:25

尝试使用 SELECT 来设置标识而不是使用 SET

SELECT @NewCategoryID = Scope_Identity()

Try using SELECT to set identity instead of using SET

SELECT @NewCategoryID = Scope_Identity()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文