Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Der beste Weg, um PK Guid der eingefügten Zeile zu erhalten

Sie können die OUTPUT-Funktion verwenden, um die Standardwerte wieder in einen Parameter zurückzugeben.

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

Ich muss jedoch sagen, seien Sie vorsichtig, wenn Sie einen eindeutigen Bezeichner als Primärschlüssel verwenden. Das Indizieren auf einer GUID ist eine extrem schlechte Leistung, da alle neu generierten GUIDs in die Mitte eines Index eingefügt und selten nur am Ende hinzugefügt werden müssen. Es gibt eine neue Funktionalität in SQL2005 für NewSequentialId(). Wenn bei Ihren Guids keine Unklarheit erforderlich ist, ist dies eine mögliche Alternative.