Sql server 从存储过程返回输出
通过裸体选择,我得到了正确的标识Sql server 从存储过程返回输出,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,通过裸体选择,我得到了正确的标识 declare @iden table (pk int); update top (1) lockDate with (UPDLOCK) set dt = GETDATE() output inserted.iden into @iden where dt is null select top (1) iden.pk from @iden iden; 当我尝试将其放入存储过程时,总是得到一个0 你知道我做错了什么吗 DROP PROCEDURE
declare @iden table (pk int);
update top (1) lockDate with (UPDLOCK)
set dt = GETDATE()
output inserted.iden into @iden
where dt is null
select top (1) iden.pk
from @iden iden;
当我尝试将其放入存储过程时,总是得到一个0
你知道我做错了什么吗
DROP PROCEDURE addLockDate
CREATE PROCEDURE addLockDate
AS
DECLARE @iden TABLE (pk INT);
UPDATE TOP (1) lockDate WITH (UPDLOCK)
SET dt = GETDATE()
OUTPUT inserted.iden INTO @iden
WHERE dt IS NULL
RETURN SELECT TOP (1) iden.pk
FROM @iden iden
GO
未经测试,但这可能有效:
drop PROCEDURE addLockDate
CREATE PROCEDURE addLockDate
AS
declare @iden table (pk int);
update top (1) lockDate with (UPDLOCK)
set dt = GETDATE()
output inserted.iden into @iden
where dt is null
return (select top (1) iden.pk
from @iden iden);
GO
这肯定会奏效:
drop PROCEDURE addLockDate
CREATE PROCEDURE addLockDate
AS
declare @iden table (pk int);
declare @outint int;
update top (1) lockDate with (UPDLOCK)
set dt = GETDATE()
output inserted.iden into @iden
where dt is null
set @outint = (select top (1) iden.pk
from @iden iden);
return @outint;
GO
试着把最后的选择放在括号里?或者使用一个中间变量。更新top 1???@SeanLange是的,这就是我想从过程中删除的“return”,这甚至是有效的语法?它如何知道要更新哪一行?它需要一个顺序,我猜在update语句中该顺序是无效的。我觉得这里有些不对劲。