我正在尝试创建一个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
答案 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()