Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Meilleur moyen d'obtenir le PK Guid de la ligne insérée

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

Je dois dire cependant, soyez prudent en utilisant un identifiant unique comme clé primaire. L'indexation sur un GUID est extrêmement médiocre car tout GUID nouvellement généré devra être inséré au milieu d'un index et rarement ajouté à la fin. Il existe une nouvelle fonctionnalité dans SQL2005 pour NewSequentialId(). Si l'obscurité n'est pas nécessaire avec vos Guids, c'est une alternative possible.