La mejor manera de obtener PK Guid de fila insertada
-
03-07-2019 - |
Pregunta
He leído esta pregunta sobre cómo obtener el Identidad de una fila insertada. Mi pregunta está más o menos relacionada.
¿Hay alguna forma de obtener el guid para una fila insertada? La tabla con la que estoy trabajando tiene una guía como clave principal (predeterminada a newid), y me gustaría recuperar esa guía después de insertar la fila.
¿Hay algo como @@ IDENTITY
, IDENT_CURRENT
o SCOPE_IDENTITY
para Guías?
Solución
Puede usar 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 utilizar un identificador único como clave principal. La indexación en un GUID es un rendimiento extremadamente pobre, ya que cualquier guía recién generada deberá insertarse en el medio de un índice y apenas agregarse al final. Hay una nueva funcionalidad en SQL2005 para NewSequentialId (). Si no se requiere oscuridad con sus Guías, entonces es una posible alternativa.
Otros consejos
Otro enfoque más limpio, si inserta una sola fila
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;