Лучший способ получить PK Guid вставленного ряда - PullRequest
10 голосов
/ 01 мая 2009

Я прочитал этот вопрос о получении идентификатора вставленной строки. Мой вопрос в некотором роде связан.

Есть ли способ получить руководство для вставленной строки? Таблица, с которой я работаю, имеет guid в качестве первичного ключа (по умолчанию newid), и я хотел бы получить этот guid после вставки строки.

Есть ли что-нибудь вроде @@IDENTITY, IDENT_CURRENT или SCOPE_IDENTITY для гидов?

Ответы [ 2 ]

13 голосов
/ 01 мая 2009

Вы можете использовать функцию ВЫХОД, чтобы вернуть значения по умолчанию обратно в параметр.

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 является крайне низкой производительностью, так как любые новые сгенерированные направляющие должны быть вставлены в середину индекса и редко добавляться в конце. В SQL2005 появилась новая функциональность для NewSequentialId (). Если с вашими гидами не требуется неизвестность, тогда возможная альтернатива.

2 голосов
/ 10 ноября 2015

Еще один более чистый подход, если вставить одну строку

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...