【发布时间】:2016-04-10 23:05:42
【问题描述】:
我在 SQL Server 存储过程中使用了一个变量,但我遇到了问题。
我想向我的表中插入数据,但在插入之前,我想检查它是否已经存在,然后我只会更新该行。
在查询中它可以正常工作,但在存储过程中却不行。
我的查询是
create proc AddPeople
@Code nvarchar(50),
@Name nvarchar(50)
as
begin
declare @PeopleID bigint
select @PeopleID = id
from tbl_People
where code = @Code
if @PeopleID is Null
begin
INSERT INTO tbl_People(Code, Name)
VALUES(@Code, @Name)
SELECT @PeopleID = @@IDENTITY
end
else
begin
UPDATE tbl_People
SET Name = @name
WHERE id = @PeopleID
end
select @PeopleID as id
end
在第一个“if”中,@PeopleID 始终为 NULL,存储过程将行插入表中,但我有代码
【问题讨论】:
-
你的代码有什么问题?
-
在代码中始终设置@peopleID=NULL 并始终插入人员
-
我想如果我的表中有@Code,只需更新行
-
看起来它应该对我有用。你确定你肯定在执行这个存储过程吗?有时,如果您在 master 或 dbo 以外的模式中意外有一个,可能会混淆哪个实际正在运行。尝试在其中放置一条打印语句或其他内容,这样您就可以确定这是正在执行的语句,并打印出 Code 和 PeopleID 的值。也很高兴看到您要插入的表的定义
-
我还建议使用
SCOPE_IDENTITY()而不是其他任何东西(如@@IDENTITY)来获取新插入的标识值。 See this blog post for an explanation as to WHY
标签: sql sql-server variables stored-procedures