Il modo migliore per ottenere PK Guid della riga inserita
-
03-07-2019 - |
Domanda
Ho letto questa domanda su come ottenere il identità di una riga inserita. La mia domanda è in qualche modo correlata.
C'è un modo per ottenere il guid per una riga inserita? La tabella con cui sto lavorando ha una guida come chiave primaria (predefinita a newid) e vorrei recuperarla dopo aver inserito la riga.
Esiste qualcosa come @@ IDENTITY
, IDENT_CURRENT
o SCOPE_IDENTITY
per le guide?
Soluzione
È 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ò, stai attento usando un identificatore univoco come chiave primaria. L'indicizzazione su un GUID è una prestazione estremamente scadente poiché tutte le guide appena generate dovranno essere inserite nel mezzo di un indice e raramente aggiunte alla fine. Sono disponibili nuove funzionalità in SQL2005 per NewSequentialId (). Se l'oscurità non è richiesta con le tue Guide, allora è una possibile alternativa.
Altri suggerimenti
Un altro approccio più pulito, se si inserisce una singola riga
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;