获取插入行的PK Guid的最佳方法

Rei*_*ica 10 sql-server identity sql-server-2005 insert uniqueidentifier

我已经阅读了有关获取插入行的标识的问题.我的问题有点相关.

有没有办法获得插入行的guid?我正在使用的表有一个guid作为主键(默认为newid),我想在插入行后检索该guid.

有没有像什么@@IDENTITY,IDENT_CURRENT或者SCOPE_IDENTITY对的GUID?

Rob*_*Day 13

您可以使用OUTPUT功能将默认值返回到参数中.

CREATE TABLE MyTable
(
    MyPK UNIQUEIDENTIFIER DEFAULT NEWID(),
    MyColumn1 NVARCHAR(100),
    MyColumn2 NVARCHAR(100)
)

DECLARE @myNewPKTable TABLE (myNewPK UNIQUEIDENTIFIER)

INSERT INTO 
    MyTable
(
    MyColumn1,
    MyColumn2
)
OUTPUT INSERTED.MyPK INTO @myNewPKTable
VALUES
(
    'MyValue1',
    'MyValue2'
)

SELECT * FROM @myNewPKTable
Run Code Online (Sandbox Code Playgroud)

我不得不说,小心使用唯一标识符作为主键.对GUID进行索引的性能非常差,因为任何新生成的guid都必须插入到索引的中间,并且最后只是添加了.SQL2005中有NewSequentialId()的新功能.如果您的Guids不需要默默无闻,那么它可能是另一种选择.

  • 不知道为什么在没有先进入临时表的情况下简单地选择 INSERTED 值会遇到麻烦......“INSERT INTO Table (Fields) OUTPUT INSERTED.* VALUES (FieldValues)”对我来说非常适合。SQL Server 10.0.1600。 (2认同)