Si vous avez spécifiquement besoin de changer la valeur de la clé primaire en un nombre différent (ex 123 -> 1123). La propriété d'identité bloque la modification d'une valeur PK. Définir Identity_insert ne fonctionnera pas. Il n'est pas conseillé d'effectuer une insertion / suppression si vous avez des suppressions en cascade (sauf si vous désactivez la vérification de l'intégrité référentielle).
Ce script désactivera l'identité sur un PK:
***********************
sp_configure 'allow update', 1
go
reconfigure with override
go
update syscolumns set colstat = 0 --turn off bit 1 which indicates identity column
where id = object_id('table_name') and name = 'column_name'
go
exec sp_configure 'allow update', 0
go
reconfigure with override
go
***********************
Ensuite, vous pouvez définir les relations afin qu'elles mettent à jour les références de clé étrangère. Sinon, vous devez désactiver l'application des relations. Ce lien SO montre comment:
Comment les contraintes de clé étrangère peuvent-elles être temporairement désactivées à l'aide de T-SQL?
Maintenant, vous pouvez faire vos mises à jour. J'ai écrit un court script pour écrire tout mon SQL de mise à jour basé sur le même nom de colonne (dans mon cas, j'avais besoin d'augmenter le CaseID de 1000000:
select
'update ['+c.table_name+'] SET ['+Column_Name+']=['+Column_Name+']+1000000'
from Information_Schema.Columns as c
JOIN Information_Schema.Tables as t ON t.table_Name=c.table_name and t.Table_Schema=c.table_schema and t.table_type='BASE TABLE'
where Column_Name like 'CaseID' order by Ordinal_position
Enfin, réactivez l'intégrité référentielle, puis réactivez la colonne Identité sur la clé primaire.
Remarque: je vois des gens sur ces questions demander POURQUOI. Dans mon cas, je dois fusionner les données d'une deuxième instance de production dans une base de données maître afin de pouvoir arrêter la deuxième instance. J'ai juste besoin de toutes les données PK / FK des opérations pour ne pas entrer en collision. Les FK de méta-données sont identiques.