280 votes

Comment mettre à jour la colonne Identity dans SQL Server ?

J'ai une base de données SQL Server et je veux changer la colonne d'identité car elle a commencé avec un grand nombre 10010 et elle est liée à une autre table, maintenant j'ai 200 enregistrements et je veux corriger ce problème avant que le nombre d'enregistrements n'augmente.

Quel est le meilleur moyen de changer ou réinitialiser cette colonne?

369voto

Sachin Points 19502

Vous ne pouvez pas mettre à jour la colonne d'identité.

SQL Server ne permet pas de mettre à jour la colonne d'identité contrairement à ce que vous pouvez faire avec d'autres colonnes à l'aide d'une instruction de mise à jour.

Bien qu'il existe des alternatives pour répondre à des besoins similaires.

  • Lorsque la valeur de la colonne d'identité doit être mise à jour pour de nouveaux enregistrements

Utilisez DBCC CHECKIDENT qui vérifie la valeur d'identité actuelle pour la table et, si nécessaire, modifie la valeur d'identité.

DBCC CHECKIDENT('nomTable', RESEED, NOUVELLE_VALEUR_RESEED)
  • Lorsque la valeur de la colonne d'identité doit être mise à jour pour des enregistrements existants

Utilisez IDENTITY_INSERT qui permet d'insérer des valeurs explicites dans la colonne d'identité d'une table.

SET IDENTITY_INSERT VotreTable {ON|OFF}

Exemple:

-- Activer l'insertion d'identité pour pouvoir insérer une valeur dans cette colonne
SET IDENTITY_INSERT VotreTable ON
GO
-- Insérer l'enregistrement que vous souhaitez mettre à jour avec une nouvelle valeur dans la colonne d'identité
INSERT INTO VotreTable(ColonneIdentité, autreColonne) VALEURS(13,'maValeur')
GO
-- Supprimer l'ancienne ligne dont vous avez inséré une copie (ci-dessus) (assurez-vous des clés étrangères)
DELETE FROM VotreTable WHERE ID=3
GO
-- Maintenant désactiver l'insertion d'identité pour revenir à la situation précédente
SET IDENTITY_INSERT VotreTable OFF

7 votes

DBCC Réinitialise le prochain nouveau enregistrement, mais ce que je veux maintenant, c'est changer les enregistrements existants.

0 votes

Pouvez-vous donner un exemple s'il vous plaît ?

54 votes

@sachin ceci ne met pas à jour une IDENTITÉ existante, c'est l'insertion manuelle

92voto

Luv Points 7630

Si j'ai bien compris votre question, vous voulez faire quelque chose comme

update table
set identity_column_name = some value

Laissez-moi vous dire que ce n'est pas un processus facile et il n'est pas conseillé de l'utiliser, car il peut y avoir des foreign key associés.

Mais voici les étapes à suivre, veuillez sauvegarder la table

Étape 1- Sélectionnez la vue de conception de la table

entrez la description de l'image ici

Étape 2- Désactivez la colonne d'identité

entrez la description de l'image ici

Maintenant vous pouvez utiliser la requête update.

Maintenant, refaites les étapes 1 et 2 et réactivez la colonne d'identité

Référence

1 votes

J'ai une autre table liée à cette table, je pense que je ne peux pas le faire

5 votes

Par conséquent, la déclaration il n'est pas conseillé :)

5 votes

@AbdusalamElsherif Mais vous avez demandé comment changer la colonne d'identité.

76voto

R S P Points 199

Vous devez

set identity_insert YourTable ON

Ensuite, supprimez votre ligne et réinsérez-la avec une identité différente.

Une fois que vous avez effectué l'insertion, n'oubliez pas de désactiver identity_insert

set identity_insert YourTable OFF

0 votes

C'est tellement plus facile et plus sûr que de désactiver l'identité pour la colonne !

0 votes

C'est plus sûr et facile pour un petit nombre d'enregistrements, mais ne répond pas correctement à la question. Désactiver l'identité, bien que plus dangereux et parfois impossible, vous permet de mettre à jour la colonne d'identité.

13voto

Darren Davies Points 29038

Essayez d'utiliser DBCC CHECKIDENT :

DBCC CHECKIDENT ('YourTable', RESEED, 1);

1 votes

Cela n'autorise pas la mise à jour de la colonne d'identité. Cette instruction réinitialise simplement la valeur d'identité qui sera utilisée lorsque de nouveaux enregistrements seront insérés et ne modifie aucun enregistrement.

3voto

DaveShaw Points 19555

Vous pouvez également utiliser SET IDENTITY INSERT pour vous permettre d'insérer des valeurs dans une colonne d'identité.

Exemple:

SET IDENTITY_INSERT dbo.Tool ON
GO

Ensuite, vous pouvez insérer dans une colonne d'identité les valeurs dont vous avez besoin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X