Meilleur moyen d’obtenir PK Guid de la rangée insérée
-
03-07-2019 - |
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?
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;