Лучший способ получить PK Guid вставленной строки
-
03-07-2019 - |
Вопрос
Я читал этот вопрос о получении идентификатора вставленной строки.Мой вопрос в некотором роде связан с этим.
Есть ли способ получить guid для вставленной строки?Таблица, с которой я работаю, имеет guid в качестве первичного ключа (по умолчанию используется newid), и я хотел бы получить этот guid после вставки строки.
Есть ли что-нибудь подобное @@IDENTITY
, IDENT_CURRENT
или SCOPE_IDENTITY
для Guid?
Решение
Вы можете использовать функцию ВЫВОДА, чтобы вернуть значения по умолчанию обратно в параметр.
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().Если неизвестность не требуется для ваших Guid, то это возможная альтернатива.
Другие советы
Другой более чистый подход, если вставить одну строку
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;