Jeśli chcesz zmienić wartość klucza podstawowego na inną liczbę (np. 123 -> 1123). Właściwość tożsamości blokuje zmianę wartości PK. Zestaw Identity_insert nie zadziała. Wykonanie operacji wstawiania / usuwania nie jest zalecane, jeśli masz kaskadowe usuwanie (chyba że wyłączysz sprawdzanie integralności referencyjnej).
Ten skrypt wyłączy tożsamość na 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
***********************
Następnie możesz ustawić relacje, aby zaktualizowały odwołania do klucza obcego. W przeciwnym razie musisz wyłączyć wymuszanie relacji. Ten link SO pokazuje, jak: W
jaki sposób ograniczenia klucza obcego można tymczasowo wyłączyć za pomocą T-SQL?
Teraz możesz zrobić swoje aktualizacje. Napisałem krótki skrypt, aby zapisać wszystkie moje aktualizacje SQL na podstawie tej samej nazwy kolumny (w moim przypadku musiałem zwiększyć CaseID o 1 000 000:
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
Na koniec włącz ponownie integralność referencyjną, a następnie ponownie włącz kolumnę Tożsamość na kluczu podstawowym.
Uwaga: Widzę, że niektórzy ludzie na te pytania pytają DLACZEGO. W moim przypadku muszę scalić dane z drugiej instancji produkcyjnej do głównej bazy danych, aby móc zamknąć drugą instancję. Potrzebuję tylko wszystkich danych PK / FK operacji, aby się nie kolidować. Metadane FK są identyczne.