返回刚刚添加的行的id

时间:2009-05-06 13:31:37

标签: tsql sql-server-2000

与我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)声明,但我想知道是否有更好的方法?

有更好的方法吗?你会怎么做?

5 个答案:

答案 0 :(得分:4)

SELECT @CaseID = SCOPE_IDENTITY()

事实上,你可以这样做(如果这是存储过程的结束。):

SELECT SCOPE_IDENTITY()

(OUTPUT子句仅在SQL Server 2005及更高版本中可用...)

参考:SCOPE_IDENTITY

答案 1 :(得分:1)

SCOPE_IDENTITY()

答案 2 :(得分:1)

SELECT SCOPE_IDENTITY()

答案 3 :(得分:1)

正如其他人提到的,SCOPE_IDENTITY()是可行的方法,尽管一些ORM工具也提供此功能。

您唯一需要记住的是SCOPE_IDENTITY()将返回仅在当前会话期间生成的最后一个身份密钥值。这对于过滤掉可能由其他客户端同时创建的新密钥很有用。 SELECT @@ IDENTITY将返回任何客户端/会话生成的最后一个密钥。

答案 4 :(得分:0)

您需要使用OUTPUT子句

http://blog.jemm.net/articles/databases/how-to-using-sql-server-2005s-output-to-return-generated-identity/

......正如所指出的那样,只能在sqlserver 2005中使用.Plz无视。