Wenn Sie den Primärschlüsselwert speziell in eine andere Zahl ändern müssen (z. B. 123 -> 1123). Die Identitätseigenschaft blockiert das Ändern eines PK-Werts. Set Identity_insert wird nicht funktionieren. Das Einfügen / Löschen ist nicht ratsam, wenn Sie kaskadierende Löschvorgänge haben (es sei denn, Sie deaktivieren die Überprüfung der referenziellen Integrität).
Dieses Skript deaktiviert die Identität einer 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
***********************
Als Nächstes können Sie die Beziehungen so einstellen, dass sie die Fremdschlüsselreferenzen aktualisieren. Oder Sie müssen die Durchsetzung von Beziehungen deaktivieren. Dieser SO-Link zeigt, wie:
Wie können Fremdschlüsseleinschränkungen mithilfe von T-SQL vorübergehend deaktiviert werden?
Jetzt können Sie Ihre Updates durchführen. Ich habe ein kurzes Skript geschrieben, um alle meine Update-SQLs mit demselben Spaltennamen zu schreiben (in meinem Fall musste ich die CaseID um 1.000.000 erhöhen:
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
Zuletzt aktivieren Sie die referenzielle Integrität erneut und aktivieren Sie dann die Spalte Identität auf dem Primärschlüssel erneut.
Hinweis: Ich sehe einige Leute bei diesen Fragen fragen, warum. In meinem Fall muss ich Daten von einer zweiten Produktionsinstanz in eine Master-Datenbank zusammenführen, damit ich die zweite Instanz herunterfahren kann. Ich brauche nur alle PK / FKs der Betriebsdaten, um nicht zu kollidieren. Metadaten-FKs sind identisch.