मैं एसक्यूएल में अपग्रेड और बैकआउट स्क्रिप्ट बनाने की कोशिश कर रहा हूं।SQL सर्वर एक डीएफ बाधा क्यों बना रहा है?
IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'ColumnName'
AND object_id = OBJECT_ID(N'[dbo].[TableName]'))
ALTER TABLE TableName
ADD ColumnName bit NOT NULL DEFAULT(0)
backout स्क्रिप्ट इतनी तरह स्तंभ निकालता है:: उन्नयन स्क्रिप्ट इतनी तरह एक कॉलम जोड़ने पर
Msg 5074, Level 16, State 1, Line 5
The object 'DF__TableName__ColumnName__1BF3D5BD' is dependent on column 'ColumnName'.
Msg 4922, Level 16, State 9, Line 5
ALTER TABLE DROP COLUMN ColumnName failed because one or more objects access this column.
मुझे पता है:
IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ColumnName'
AND object_id = OBJECT_ID(N'[dbo].[TableName]'))
ALTER TABLE TableName
DROP COLUMN ColumnName
हालांकि, backout स्क्रिप्ट इस त्रुटि फेंकता बाधा को कैसे छोड़ें, लेकिन बाधा का नाम हर बार बदलता है (प्रत्यय परिवर्तन)। मुझे या तो यादृच्छिक रूप से नामित बाधा उत्पन्न करने के लिए SQL सर्वर की आवश्यकता है या नाम बदलने के बाद, मुझे जंगली-कार्ड वर्णों का उपयोग करके मेरी स्क्रिप्ट में बाधा को दूर करने में सक्षम होना चाहिए।
+1 यह आम तौर पर स्पष्ट रूप से कमी नाम के लिए सिफारिश की है। –
धन्यवाद मार्टिन। साथ ही, यह जांचने के लिए कि क्या बाधा मौजूद है (इसे छोड़ने से पहले), मैंने वर्णित विधि का उपयोग किया ** [यहां] (http://stackoverflow.com/questions/2499332/how-to-check-if-a-constraint- मौजूद-इन-एसक्यूएल-सर्वर/6839547 # 6839547) ** – WEFX
@ अलवारो। वीकरियो - हाँ। मार्टिन का जवाब आपको एक उदाहरण देता है। –