在T-SQL中,OUTPUT INTO只能用于表变量吗?

时间:2012-08-06 10:22:20

标签: tsql

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

即。我可以做些什么(我知道这不起作用):

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)

2 个答案:

答案 0 :(得分:1)

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

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

无论如何,Scope_Identity()有什么问题?

答案 1 :(得分:-1)

根据Microsoft Books联机,如果只有一条记录受更新语句的影响,您可以将更新的信息捕获到变量名中。我试过了,它工作正常。这是我的测试代码。亲自尝试一下,让我知道。

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'