我已阅读此问题插入行的标识。我的问题有点相关。

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

Guids有 @@ IDENTITY IDENT_CURRENT SCOPE_IDENTITY 吗?

有帮助吗?

解决方案

您可以使用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不需要默默无闻,那么它可能是替代方案。

其他提示

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

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;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top