2009-02-13 9 views
11

मुझे किसी मौजूदा SQL सर्वर तालिका में बाधा जोड़ने की आवश्यकता है, लेकिन केवल तभी यदि यह पहले से मौजूद नहीं है।SQL सर्वर: मैं किसी मौजूदा तालिका में बाधा कैसे जोड़ूं लेकिन केवल तभी बाधा मौजूद नहीं है?

मैं निम्नलिखित SQL का उपयोग कर बाधा उत्पन्न कर रहा हूं।

ALTER TABLE [Foo] ADD CONSTRAINT [FK_Foo_Bar] FOREIGN KEY ([BarId]) REFERENCES [Bar] ([BarId]) ON UPDATE CASCADE ON DELETE CASCADE 

मैं मैं एसक्यूएल बाधा के अस्तित्व के लिए परीक्षण करने के लिए की शुरुआत करने के लिए कुछ एसक्यूएल जोड़ सकते हैं आशा करती हूं कि लेकिन मैं पता नहीं कैसे कर सकते है। एक यह है कि वहाँ कोई रास्ता अलग

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[MyFKName]') AND OBJECTPROPERTY(id, N'IsForeignKey') = 1) 
    ALTER TABLE dbo.MyTableName DROP CONSTRAINT MyFKName 
GO 
ALTER TABLE dbo.MyTableName ADD CONSTRAINT [MyFKName] ... 

उत्तर

16

व्यक्तिगत तौर पर मैं मौजूदा बाधा ड्रॉप होता है, और इसे पुन:। यह अलग डेटाबेस इंजन में पोर्टेबल है:

SELECT COUNT(*) 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
WHERE TABLE_NAME='Foo' 
AND CONSTRAINT_NAME='FK_Foo_Bar' 
AND CONSTRAINT_TYPE='FOREIGN KEY' 
+3

dbo.sysobjects को भविष्य के संस्करण में हटा दिया जाएगा। एसक्यूएल 2005 के लिए और इसके बजाय sys.objects का उपयोग करें। – mrdenny

8

मैं INFORMATION_SCHEMA.TABLE_CONSTRAINTS दृश्य का उपयोग की सलाह देते हैं में है मामले में -

0
Alter table tableName add constraint constraintname default 0 for columnname 

आप constraintname के रूप में आप चाहते हैं प्रदान कर सकते हैं एकल उद्धरण

0

ड्रॉप डिफ़ॉल्ट बाधा के बिना और अपना खुद का बना। । परिवर्तन तालिका TABLE_NAME ड्रॉप बाधा बाधा नाम GO ALTER तालिका [dbo] [TABLE_NAME] जोड़ने से पहले जोड़ें बाधा [DF_TABLE_NAME_COLUMN_NAME] के लिए [स्तंभ]

1

चेक यदि बाधा पहले से मौजूद है -

IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS WHERE CONSTRAINT_NAME = 'FK_Foo_Bar') 
    BEGIN 
    ALTER TABLE dbo.MyTableName ADD CONSTRAINT [MyFKName] ... 
    END 
0
बहुत

सरल:

यदि object_id ('Schema.keyname') शून्य

ALTER तालिका Schema.tablename है बाधा कीनेम जोड़ें ...

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