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?

¿Fue útil?

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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top