Frage

Ich habe diese Frage lesen über die Einstiegs- Identität einer eingefügten Zeile. Meine Frage ist eine Art verwendet.

Gibt es eine Möglichkeit die GUID für eine eingelegte Reihe zu bekommen? Die Tabelle ich arbeite mit hat eine GUID als Primärschlüssel (standardmäßig auf newid), und ich möchte, dass guid abrufen möchten, nachdem die Zeile eingefügt wird.

Gibt es etwas wie @@IDENTITY, IDENT_CURRENT oder SCOPE_IDENTITY für Guids?

War es hilfreich?

Lösung

Sie können die Ausgabe-Funktionalität verwenden, um die Standardwerte wieder in einen Parameter zurückzukehren.

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 allerdings sagen, vorsichtig sein, eine eindeutige Kennung als Primärschlüssel verwendet wird. Indizierung auf einer GUID ist extrem schlechte Leistung als alle neu generierten guids wird in die Mitte eines Index eingefügt werden und rrarely nur am Ende hinzugefügt. Es gibt neue Funktionen in SQL2005 für NEWSEQUENTIALID (). Wenn Unklarheit ist nicht erforderlich, mit Ihrem Guids dann seine eine mögliche Alternative.

Andere Tipps

Ein weiterer sauberer Ansatz, wenn eine einzelne Zeile Einfügen

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top