sql server 2008 - आश्रित कॉलम पर वैकल्पिक तालिका




sql-server-2008 alter-table (2)

मैं int से tinyint के लिए प्राथमिक कुंजी के कॉलम डेटाटाइप को बदलने की कोशिश कर रहा हूं। यह कॉलम अन्य तालिकाओं में एक विदेशी कुंजी है। इसलिए, मुझे निम्न त्रुटि मिलती है:

संदेश 5074, स्तर 16, राज्य 1, रेखा 1 ऑब्जेक्ट 'PK_User_tbl' कॉलम 'appId' पर निर्भर है। संदेश 5074, स्तर 16, राज्य 1, रेखा 1 ऑब्जेक्ट 'FK_Details_tbl_User_tbl' कॉलम 'appId' पर निर्भर है। संदेश 5074, स्तर 16, राज्य 1, रेखा 1 ऑब्जेक्ट 'FK_Log_tbl_User_tbl' कॉलम 'appId' पर निर्भर है। संदेश 4922, स्तर 16, राज्य 9, रेखा 1 वैकल्पिक तालिका वैकल्पिक कॉलम ऐप विफल हुआ क्योंकि एक या अधिक ऑब्जेक्ट्स इस कॉलम तक पहुंचते हैं।

निर्भरता को हटाने और उन्हें फिर से बनाने के अलावा कोई अन्य तरीका है?


मेरा मानना ​​है कि आपको पहले विदेशी कुंजी बाधाओं को छोड़ना होगा। फिर सभी उपयुक्त तालिकाओं को अपडेट करें और उन्हें रीमेप करें जैसे वे थे।

ALTER TABLE [dbo.Details_tbl] DROP CONSTRAINT [FK_Details_tbl_User_tbl];
-- Perform more appropriate alters
ALTER TABLE [dbo.Details_tbl] ADD FOREIGN KEY (FK_Details_tbl_User_tbl) 
    REFERENCES User_tbl(appId);
-- Perform all appropriate alters to bring the key constraints back

हालांकि, जब तक कि स्मृति वास्तव में एक बड़ा मुद्दा नहीं है, मैं पहचान को एक आईएनटी के रूप में रखूंगा। जब तक कि आप 100% सकारात्मक न हों कि आपकी चाबियाँ टिन्यिनट संयम से पहले कभी नहीं बढ़ेगी। सिर्फ चेतावनी का एक शब्द :)


यदि आपकी बाधा उपयोगकर्ता प्रकार पर है, तो यह देखने के लिए मत भूलना कि Default Constraint , आमतौर पर कुछ ऐसा है जैसे DF__TableName__ColumnName__6BAEFA67 , यदि ऐसा है तो आपको Default Constraint को छोड़ना होगा, जैसे:

ALTER TABLE TableName DROP CONSTRAINT [DF__TableName__ColumnName__6BAEFA67]

अधिक जानकारी के लिए इस जवाब पर शानदार हारून बर्ट्रैंड द्वारा टिप्पणियां देखें।





alter-column