与我previous question的情况类似,我再次向SO家伙询问你的集体智慧和帮助。
在存储过程中,在传递一些检查之后,我需要插入一个新行并返回新创建的id。检查是否存在一行是有效的,所以它就是我未定的那一点。
该表有两个重要的列:LocationID和CaseID。 CaseID是自动递增的,因此当您添加插入新的locationid时,它会自动增加。
我目前有这个:
-- previous checks for existance of CaseID
IF @CaseID IS NULL
BEGIN
INSERT INTO
Cases(LocationID)
VALUES
(@LocationID)
-- what now?
END
我当时正考虑过立即执行@CaseID = (SELECT blah)
声明,但我想知道是否有更好的方法?
有更好的方法吗?你会怎么做?
答案 0 :(得分:4)
SELECT @CaseID = SCOPE_IDENTITY()
事实上,你可以这样做(如果这是存储过程的结束。):
SELECT SCOPE_IDENTITY()
(OUTPUT子句仅在SQL Server 2005及更高版本中可用...)
答案 1 :(得分:1)
SCOPE_IDENTITY()
答案 2 :(得分:1)
SELECT SCOPE_IDENTITY()
答案 3 :(得分:1)
正如其他人提到的,SCOPE_IDENTITY()是可行的方法,尽管一些ORM工具也提供此功能。
您唯一需要记住的是SCOPE_IDENTITY()将返回仅在当前会话期间生成的最后一个身份密钥值。这对于过滤掉可能由其他客户端同时创建的新密钥很有用。 SELECT @@ IDENTITY将返回任何客户端/会话生成的最后一个密钥。
答案 4 :(得分:0)
您需要使用OUTPUT子句
......正如所指出的那样,只能在sqlserver 2005中使用.Plz无视。