Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Melhor maneira de obter o PK Guid da linha inserida


Você pode usar a funcionalidade OUTPUT para retornar os valores padrão de volta a 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

Devo dizer, porém, tenha cuidado ao usar um identificador exclusivo como chave primária. A indexação em um GUID é um desempenho extremamente ruim, pois quaisquer guids recém-gerados terão que ser inseridos no meio de um índice e raramente adicionados no final. Há uma nova funcionalidade no SQL2005 para NewSequentialId(). Se a obscuridade não for necessária com seus Guids, então é uma alternativa possível.