Question

J'ai lu cette question sur l'obtention de la identité d'une ligne insérée. Ma question est en quelque sorte liée.

Existe-t-il un moyen d'obtenir le GUID pour une ligne insérée? La table sur laquelle je travaille a un guid comme clé primaire (par défaut, newid), et j'aimerais récupérer ce guid après l'insertion de la ligne.

Existe-t-il des éléments tels que @@ IDENTITY , IDENT_CURRENT ou SCOPE_IDENTITY pour les guides?

Était-ce utile?

La solution

Vous pouvez utiliser la fonctionnalité OUTPUT pour renvoyer les valeurs par défaut dans un paramètre.

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

Cependant, soyez prudent en utilisant un identifiant unique en tant que clé primaire. L'indexation sur un GUID est une performance extrêmement médiocre, car toutes les nouvelles instructions générées devront être insérées au milieu d'un index et rarement ajoutées à la fin. Il existe une nouvelle fonctionnalité dans SQL2005 pour NewSequentialId (). Si l’obscurité n’est pas nécessaire avec vos guides, c’est une alternative possible.

Autres conseils

Une autre approche plus propre, si vous insérez une seule ligne

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top