Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Il modo migliore per ottenere PK Guid della riga inserita

È possibile utilizzare la funzionalità OUTPUT per restituire i valori predefiniti in un parametro.

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 dire però, fai attenzione a usare un identificatore univoco come chiave primaria. L'indicizzazione su un GUID ha prestazioni estremamente scarse poiché eventuali GUID appena generati dovranno essere inseriti nel mezzo di un indice e raramente aggiunti alla fine. C'è una nuova funzionalità in SQL2005 per NewSequentialId(). Se l'oscurità non è richiesta con i tuoi Guid, è una possibile alternativa.