Melhor maneira de obter PK Guid da linha inserida
-
03-07-2019 - |
Pergunta
Eu li esta questão sobre como obter o identidade de uma linha inserida. A minha pergunta é tipo de relacionados.
Existe uma maneira de obter o guid para uma linha inserida? A tabela Eu estou trabalhando com tem um guid como chave primária (padrão para newid), e eu gostaria de recuperar que guid depois de inserir a linha.
Há algo como @@IDENTITY
, IDENT_CURRENT
ou SCOPE_IDENTITY
para Guids?
Solução
Você pode usar a funcionalidade de saída para repor os valores predefinidos para trás em um parâmetro.
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
Eu tenho que dizer, porém, ter cuidado usando um identificador único como uma chave primária. Indexação em um GUID é o desempenho extremamente pobre como quaisquer guids recém-gerado terá que ser inserido no meio de um índice e rrarely apenas adicionado no final. Há nova funcionalidade no SQL2005 para NEWSEQUENTIALID (). Se obscuridade não é necessário com seus Guids então sua uma alternativa possível.
Outras dicas
Outra abordagem mais limpo, se a inserção de uma única linha
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;