Formation PUB770 : ASP.NET WebForms, H-2015 Ajuster un site qui est déjà en ligne

24.2 Faire un INSERT sur une BD en ligne


Lorsque vous devez ajouter un enregistrement dans une base de données existante, vous devez apporter une attention particulière aux identifiants.

Forcer l'insertion des identifiants

Par défaut, MS SQL ne vous permet pas de donner la valeur d'un identifiant. Si vous tentez l'instruction suivante :

MS SQL

INSERT [dbo].[produit] ([produit_id], [produit_code], [produit_nom], [produit_cat_id]) 

   VALUES (2, 'SI.000', 'Chaise longue Siesta', 1)

Vous obtiendrez le message d'erreur « Cannot insert explicit value for identity column in table 'produit' when IDENTITY_INSERT is set to OFF.»

Pour régler ce problème, vous devez :

  • Entrer une commande indiquant que vous souhaitez forcer la valeur d'un identifiant;

    ou

  • Laisser le soin à MS SQL de donner la valeur à l'identifiant.

Forcer la valeur d'un identifiant

Si vous désirez forcer la valeur d'un identifiant, vous devrez utiliser la commande SET IDENTITY avant et après la ou les requêtes INSERT.

Vous utiliserez cette technique dans le cas où :

  • Vous êtes certain que l'identifiant désiré n'est pas déjà utilisé pour cette table dans la BD en ligne.

    et

  • Lors de cette série d'ajustements à la BD, vous utiliserez cet identifiant comme clé étrangère dans une autre table. Vous devez donc être certain de sa valeur pour un enregistrement donné.

Ex :

MS SQL

SET IDENTITY_INSERT [dbo].[produit] ON 

INSERT [dbo].[produit] ([produit_id], [produit_code], [produit_nom], [produit_cat_id]) 

   VALUES (2, 'SI.000', 'Chaise longue Siesta', 1)

...

SET IDENTITY_INSERT [dbo].[produit] OFF

Laisser le soin à MS SQL de donner la valeur de l'identifiant

Dans la plupart des cas, vous n'avez pas besoin de forcer la valeur de l'identifiant. Après tout, l'identifiant ne sert qu'à identifier l'enregistrement de façon unique et il est auto-incrémenté alors pourquoi s'en soucier ?

Dans ce cas, on omettra simplement de spécifier l'identifiant dans la requête INSERT. Mais attention : pour que cela fonctionne, l'identifiant doit avoir été configuré pour être auto-incrémenté.

Ex :

MS SQL

INSERT [dbo].[produit] ([produit_code], [produit_nom], [produit_cat_id]) 

   VALUES ('SI.000', 'Chaise longue Siesta', 1)

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre