2009-05-15 8 views
35

में विदेशी कुंजी मौजूद है या नहीं, यह जांचने का एक तरीका है कि तालिका में कॉलम के लिए कोई विदेशी कुंजी मौजूद है या नहीं? मैं एक स्क्रिप्ट लिख रहा हूं जो केवल विदेशी कुंजी को जोड़ देगा यदि यह अस्तित्व में नहीं है।एसक्यूएल 2005

उत्तर

65

आप इस स्क्रिप्ट का उपयोग कर सकते हैं:

IF EXISTS (SELECT * 
      FROM sys.foreign_keys 
      WHERE object_id = OBJECT_ID(N'[dbo].[FK_NAME]') 
      AND parent_object_id = OBJECT_ID(N'[dbo].[MyTable]')) 
BEGIN 
    -- do stuff 
END 

यदि आप एक मौजूदा FK पर मेज और राइट क्लिक बाहर का विस्तार और "करने के लिए छोड़" के रूप में स्क्रिप्ट कुंजी चुनते हैं और फिर आप एक उत्पन्न हो जाएगा यह किया जा सकता है एसक्यूएल से लिपि।

+0

यह स्क्रिप्ट बहुत अच्छा काम करती है! मुझे विश्वास नहीं है कि आप मेनू से ऐसा कुछ लिख सकते हैं। मदद के लिए धन्यवाद एक गुच्छा। –

+5

आप एसक्यूएल में बस कुछ भी सही क्लिक कर सकते हैं और इसे आपके लिए, टेबल्स, संग्रहीत प्रक्रियाओं, विदेशी कुंजी और अधिक के लिए एक स्क्रिप्ट उत्पन्न कर सकते हैं। एक बार जब आप कुछ शानदार सुविधाओं को सीख सकते हैं तो प्रबंधन स्टूडियो आपका मित्र है। – CodeLikeBeaker

+0

यह विधि केवल तभी काम करती है जब विदेशी कुंजी का डिफ़ॉल्ट नाम उपयोग किया जाता है। धारणाओं के आधार पर नामों पर काम करना अविश्वसनीय है, खासकर यदि आप उन लोगों द्वारा बनाए गए डेटाबेस पर काम कर रहे हैं जो एक अलग नामकरण सम्मेलन का पालन कर सकते हैं। विदेशी कुंजी के नाम की जांच करने के बजाय किसी अन्य कॉलम की एक विदेशी कुंजी एक विशेष कुंजी है या नहीं, यह जांचने के कोई तरीके हैं? –

7

वू-हू! मैंने पिछले दो दिनों में ऐसा किया है।

IF NOT EXISTS (SELECT name 
       FROM sys.foreign_keys 
       WHERE name = 'FK_Name') 
    ALTER TABLE table_name ADD CONSTRAINT FK_Name FOREIGN KEY (idcol) 
          REFERENCES OtherTable(idcol) 
संबंधित मुद्दे