创建SQL Server更新存储过程时遇@id标量变量未声明错误求助
解决SQL Server存储过程"Must declare the scalar variable '@id'"错误
嘿,这个问题其实是两个容易犯的小错误导致的,我来帮你一步步修正:
问题1:缺少@id参数声明
你在WHERE子句里用到了@id来指定要更新的categoryId,但你的存储过程参数列表里根本没声明这个变量,SQL Server自然不知道它是什么,所以抛出了这个错误。你需要把@id(也就是要更新的分类ID)作为输入参数加到存储过程的参数列表里。
问题2:UPDATE语句的赋值顺序完全搞反了
你写的@IsActive = IsActive这种写法是把表字段的值赋值给变量,而我们要做的是用传入的参数值更新表的字段,正确的写法应该是表字段名 = 参数名,比如IsActive = @IsActive。你这里有好几个字段都犯了这个错误,包括IsSelected、mediaId、createDate、createdBy这些,全部需要修正顺序。
另外额外提醒一句:通常createDate和createdBy是记录数据创建时间和创建人的字段,更新操作一般不需要修改这两个值,如果不是业务强制要求,建议把这两个参数和对应的UPDATE语句去掉,避免误修改创建信息。
修正后的完整存储过程代码
CREATE PROCEDURE updateCategoryPro ( @id INT, -- 新增的要更新的分类ID参数 @categoryName VARCHAR(64), @IsActive BIT, @IsSelected BIT, @mediaId INT, @pageTitle VARCHAR(128), @metaKeyword VARCHAR(512), @metaDescription VARCHAR(256), @updatedDate DATETIME, @updatedBy INT -- 移除了createDate和createdBy参数,若业务需要可加回,但更新时建议不要修改这两个字段 ) AS BEGIN UPDATE CategoryMaster SET categoryName = @categoryName, IsActive = @IsActive, IsSelected = @IsSelected, mediaId = @mediaId, pageTitle = @pageTitle, metaKeyword = @metaKeyword, metaDescription = @metaDescription, updatedDate = @updatedDate, updatedBy = @updatedBy -- 如果确实需要修改创建信息,再加上createDate = @createDate, createdBy = @createdBy WHERE categoryId = @id END
内容的提问来源于stack exchange,提问作者Jitender
相关产品推荐
相关产品推荐

