sql >> Base de Datos >  >> RDS >> Sqlserver

La mejor manera de obtener PK Guid de la fila insertada

Puede utilizar la funcionalidad de SALIDA para devolver los valores predeterminados a un 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

Sin embargo, debo decir que tenga cuidado al usar un identificador único como clave principal. La indexación en un GUID tiene un rendimiento extremadamente bajo, ya que los GUID recién generados deberán insertarse en el medio de un índice y, en raras ocasiones, solo agregarse al final. Hay una nueva funcionalidad en SQL2005 para NewSequentialId(). Si no se requiere oscuridad con sus Guids, entonces es una posible alternativa.