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?

È stato utile?

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top