यदि आपको विशेष रूप से प्राथमिक कुंजी मान को किसी भिन्न संख्या (उदा 123 -> 1123) में बदलना है। पहचान संपत्ति ब्लॉक एक PK मान को बदल रहा है। सेट करें Identity_insert काम नहीं करने वाला है। यदि आपके पास कैस्केडिंग डिलीट है (जब तक कि आप संदर्भात्मक अखंडता जाँच बंद नहीं करते हैं) एक इन्सर्ट / डिलीट करना उचित नहीं है।
यह स्क्रिप्ट एक 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
***********************
अगला, आप रिश्तों को सेट कर सकते हैं ताकि वे विदेशी कुंजी संदर्भों को अपडेट करेंगे। वरना आपको रिलेशनशिप प्रवर्तन बंद करने की आवश्यकता है। यह SO लिंक दिखाता है कि कैसे:
T-SQL का उपयोग करके विदेशी कुंजी बाधाओं को अस्थायी रूप से कैसे अक्षम किया जा सकता है?
अब, आप अपने अपडेट कर सकते हैं। मैंने एक ही कॉलम नाम के आधार पर अपने सभी अपडेट एसक्यूएल को लिखने के लिए एक छोटी स्क्रिप्ट लिखी (मेरे मामले में, मुझे केसपी को एफपी द्वारा बढ़ाने की आवश्यकता थी:
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
अंत में, संदर्भात्मक अखंडता को फिर से सक्षम करें और फिर प्राथमिक कुंजी पर पहचान कॉलम को फिर से सक्षम करें।
नोट: मुझे लगता है कि इन सवालों पर कुछ लोग क्यों पूछते हैं। मेरे मामले में, मुझे एक दूसरे उत्पादन उदाहरण से डेटा को एक मास्टर DB में मर्ज करना होगा ताकि मैं दूसरी आवृत्ति को बंद कर सकूं। मुझे बस सभी पीके / एफके को ऑपरेशन डेटा की आवश्यकता है ताकि टकराव न हो। मेटा-डेटा FK समान हैं।