2011-12-29 32 views
3

如何將結果集值設置爲局部變量或過程中的輸出參數..在sql中設置值

下面。

UPDATE TOP (1) certificate WITH (ROWLOCK,READPAST,UPDLOCK) 
SET issued = 1 
OUTPUT INSERTED.certid, INSERTED.certiname 
WHERE issued = 0 AND year = 2011 

回答

2

您可以定義一個表變量,以保持輸出:

DECLARE @OutputTable TABLE (CertID INT, CertiName VARCHAR(100)) -- adapt as needed 

UPDATE TOP (1) certificate WITH (ROWLOCK,READPAST,UPDLOCK) 
SET issued = 1 
OUTPUT INSERTED.certid, INSERTED.certiname INTO @OutputTable 
WHERE issued = 0 AND year = 2011 

SELECT * FROM @OutputTable 

,然後你可以從該表變量選擇從存儲過程返回的數據(或只是窺視它) 。

PS:WITH (UPDLOCK)是絕對多餘的 - 任何UPDATE聲明總是會採取更新鎖定......您可以完全忽略它。

2

既然你只是更新單列,試試這個:

DECLARE @certid INT 
DECLARE @certinname VARCHAR(MAX) -- or whatever 
UPDATE TOP (1) certificate WITH (ROWLOCK,READPAST) 
SET issued = 1, @certid = certid, @certinname = certinname 
WHERE issued = 0 AND year = 2011 
SELECT @certid, @certinname 
+0

thanx的幫助... – 2012-01-03 11:24:28

0
DECLARE @certid INT 
DECLARE @certinname VARCHAR(MAX) -- or whatever 
UPDATE TOP (1) certificate WITH (ROWLOCK,READPAST) 
SET issued = 1, @certid = certid, @certinname = certinname 
WHERE issued = 0 AND year = 2011 
SELECT @certid, @certinname