Вопрос

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

Есть ли способ получить 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top