2

我正在尝试从 INSERT 语句中检索最新的标识值。忽略 OUTPUT、@@IDENTITY 或 SCOPE_IDENTITY() 中哪个是更好的方法的问题,我可以使用 OUTPUT 直接插入 INT 变量,还是必须 OUTPUT 到表变量中然后从中选择?

即我可以做类似的事情(我知道这不起作用):

DECLARE @NewId INT

INSERT INTO MyTable (foo)
OUTPUT INSERTED.id INTO @NewID
VALUES ('bar');

还是我总是必须这样做:

DECLARE @NewId TABLE (NewId INT)
DECLARE @NewIdAsInt INT

INSERT INTO MyTable (foo)
OUTPUT INSERTED.id INTO @NewID
VALUES ('bar');

SET @NewIdAsInt = (SELECT TOP(1) NewId FROM @NewId)
4

2 回答 2

1

OUTPUT INTO 必须引用某种表——表变量、临时表或其他表。

http://msdn.microsoft.com/en-us/library/ms177564.aspx

Scope_Identity() 到底有什么问题?

于 2012-08-06T10:27:04.887 回答
-1

根据 Microsoft Books on-line,如果更新语句影响了一个且只有一个记录,您可以将更新的信息捕获到变量名中。我试过了,效果很好。这是我的测试代码。自己试试,然后告诉我。

DECLARE @PreValue   VARCHAR(100),
        @PostValue  VARCHAR(100)

UPDATE t
SET @PreValue = t.Ter_Desc, @PostValue = t.Ter_Desc += ' Example Update'
FROM [dbo].[Dim_Territory] AS t
WHERE t.Ter_ID = 5

SELECT COALESCE(@PreValue, 'NV') AS 'Pre', COALESCE(@PostValue, 'NV') AS 'Post' 
于 2014-07-26T13:25:36.380 回答