Lors des insertions en base de données, souvent la clé primaire d’une table est gérée par le moteur de base de données SQL SERVER.
Pour une clé primaire de type Identity(1,1) on voit souvent ce genre de script, qui récupère la clé générée :
INSERT INTO [ClientType] ([Libelle])
VALUES ('Mon Type de client')
Select SCOPE_IDENTITY() as ClientTypeId
Le résultat sans appel : Le nouveau identifiant généré après l’insertion.
Mais que se passe t’il si la clé primaire n’est pas une clé auto incrémentée mais plutôt une clé de type uniqueidentifier ?
Voici un exemple de la table qui nous intéresse :
CREATE TABLE [dbo].[Test](
[ClientId] [uniqueidentifier] NOT NULL,
[ClientTypeId] [int] NOT NULL,
[FirstName] [nvarchar](100) NULL,
[LastName] [nvarchar](100) NULL,
[Civility] [tinyint] NULL,
[Gender] [tinyint] NULL,
[Email] [nvarchar](250) NULL,
CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED ( [ClientId] ASC))
GO
ALTER TABLE [dbo].[Test]
ADD CONSTRAINT [DF_Test_ClientId] DEFAULT (newid()) FOR [ClientId]
GO
Comment faire pour récupérer le GUID généré lors de l’insertion ?
Il vous suffit d’utiliser la clause Output qui permet de récupérer simplement les données insérées.
Le lien MSDN sur le sujet : Clause Output
Et voilà à quoi ressemble le script d’insertion d’une ligne avec récupération de l’identifiant de type UniqueIdentifier:
INSERT INTO [Test]
(
[ClientTypeId] ,[FirstName] ,[LastName] ,
[Civility] ,[Gender] ,[Email]
)
OUTPUT inserted.ClientId
VALUES
(
1, 'Sébastien', 'Pertus',
1, 1, 'sebastien.pertus@nospam.fr'
)
Et en prime si vous utilisez SQL SERVER 2008, vous avez même droit à l’IntelliSense !!!
Le résultat est, encore une fois, sans appel
A noter que l’instruction Output marche tout aussi bien avec les identifiants auto incrémentés
Sur ce, bonnes insertions !!