【发布时间】:2011-08-30 12:52:43
【问题描述】:
代码是这样的
INSERT INTO TABLE (VAL1,VAL2,VAL3) VALUES (X,Y,Z)
GetLastInsertID @tablename='TABLE'
GetLastInsertID 是这个存储过程:
SELECT @@IDENTITY AS LastID FROM TABLE
如何让存储过程按照上面 Select @@IDENTITY 语句中的要求返回“LastID”?
我收到以下错误:
Incorrect syntax near 'GetLastInsertId'.
...但是当它自己执行时效果很好:
GetLastInsertID @tablename='TABLE'
好的,谢谢我将它更新为 Scope_Identity()。但是你是说不要把它放在不同的SP中,而是把它和Insert放在同一个SP中?
再次,当我将插入与此组合时,我仍然收到错误:
SELECT SCOPE_IDENTITY() AS LastID FROM TABLE
这是新的错误信息:
There is already an object named 'TABLE' in the database.
【问题讨论】:
-
最好使用SCOPE_IDENTITY() 而不是
@@IDENTITY。 -
@Joe:见Joel's answer,SCOPE_IDENTITY 不起作用,因为存储过程是不同的范围。
-
查看Identity Crisis 了解为什么@@IDentity 不好。一篇老文章,但标题好记
-
@Tim - OP 应该放弃为此使用存储过程的想法。它需要在相同的上下文中调用。无论如何,
SELECT SCOPE_IDENTITY()实际上比EXEC GetLastInsertID @tablename='TABLE'要少输入。
标签: sql-server tsql