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

时间:2009-05-01 09:53:14

标签: sql-server sql-server-2005 insert identity uniqueidentifier

我已阅读this question有关获取插入行的标识的信息。我的问题有点相关。

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

Guids有@@IDENTITYIDENT_CURRENTSCOPE_IDENTITY吗?

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:2)

另一种更简洁的方法,如果插入一行

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

DECLARE @MyID UNIQUEIDENTIFIER;
SET @MyID = NEWID();

INSERT INTO 
    MyTable
(
    MyPK
    MyColumn1,
    MyColumn2
)
VALUES
(
    @MyID,
    'MyValue1',
    'MyValue2'
)

SELECT @MyID;