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

时间:2011-01-17 06:36:47

标签: sql sql-server stored-procedures select insert

我正在尝试创建一个SP,它会根据提供的ArticleTypeName从另一个表中找到ArticleType(我忘了在其上放置ID),并使用它来插入categories表中的新类别。最后,新行的ID将在输出参数中发回。我认为一切都是正确的,但我不断收到错误,说明'Insert'周围的语法不正确。我确定我错过了一些非常简单的事情!

 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

2 个答案:

答案 0 :(得分:3)

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

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;

答案 1 :(得分:0)

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

SELECT @NewCategoryID = Scope_Identity()