2012-12-11 10 views
19

मैं एसक्यूएल सर्वर 2008 का उपयोग कर रहा हूं। मुझे यह पता लगाने की ज़रूरत है कि डिफ़ॉल्ट मान बाधा मौजूद नहीं है या नहीं। मैंने जो कोशिश की है वह यहां है।आईएफ डिफ़ॉल्ट मूल्य प्रतिबंध मौजूद नहीं है कैसे जांचें?

IF (NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS WHERE CONSTRAINT_NAME ='MyConstraint')) 
BEGIN 
    ALTER TABLE [XX] ADD CONSTRAINT [MyConstraint] DEFAULT ((-1)) FOR [XXXX] 
END 
GO 

उत्तर

38
if not exists (
    select * 
     from sys.all_columns c 
     join sys.tables t on t.object_id = c.object_id 
     join sys.schemas s on s.schema_id = t.schema_id 
     join sys.default_constraints d on c.default_object_id = d.object_id 
    where t.name = 'table' 
     and c.name = 'column' 
     and s.name = 'schema') 
    .... 
+3

SQL सर्वर 2005 के रूप में, यह 'sys' स्कीमा से सूची दृश्य का उपयोग करने के लिए सिफारिश की है -' sys.columns', 'sys.tables' -' sysobjects' के बजाय इत्यादि। उन्हें SQL सर्वर –

+0

@marc_s के भविष्य के संस्करण से हटा दिया जाएगा, मैंने कोड बदल दिया है, लेकिन 'sysobjects' आदि संगतता दृश्य ** ** लंबे समय तक होने जा रहे हैं ** समय अभी तक, कम से कम SQL सर्वर के अगले संस्करण से पहले। _ निम्नलिखित SQL सर्वर डेटाबेस इंजन सुविधाओं को SQL सर्वर के ** अगले ** संस्करण में समर्थित हैं, लेकिन बाद के संस्करण में हटा दिए जाएंगे। SQL सर्वर का विशिष्ट संस्करण निर्धारित नहीं किया गया है ._ [लिंक] (http://msdn.microsoft.com/en-us/library/ms143729.aspx) – RichardTheKiwi

+1

@ रिचर्डथीकिवी - आपके लिंक में इसकी तीसरी वाक्य के रूप में शामिल है "बहिष्कृत सुविधाओं को नए अनुप्रयोगों में इस्तेमाल नहीं किया जाना चाहिए। " –

16

मैं इस आसान हो पाते:

IF OBJECT_ID('SchemaName.MyConstraint', 'D') IS NULL 
BEGIN 
    -- create it here 
END 
+2

यह SQL सर्वर 2014 में मेरे लिए काम नहीं किया। – ryascl

+3

यह SQL Server 2014 में मेरे लिए काम किया। –

संबंधित मुद्दे