2013-10-02 7 views
6

मेरे पास डीबी ए और डीबी बी है। संग्रहीत प्रक्रिया की शुरुआत में मैं B.mytable से B.mytablebackup तक सभी पंक्तियों का बैक अप लेना चाहता हूं। शेष संग्रहीत प्रक्रिया डीबी ए पर टेबल के खिलाफ चलती है (जो डेटा एकत्र करती है और इसे B.mytable पर लिखती है)।एक अलग एसक्यूएल डीबी से तालिका के अस्तित्व की जांच कैसे करें?

तो मैं अगर B.mytablebackup मौजूद

IF EXISTS(SELECT 1 FROM B.dbo.mytablebackup) 

देखने के लिए जाँच और अगर यह होता है, संग्रहीत प्रक्रिया यदि यह मौजूद नहीं है यह एक

SELECT * INTO B..mytablebackup from B..mytable 
करता है एक

INSERT INTO B..mytablebackup SELECT * FROM B..mytable 

करता है

लेकिन जब मैं संग्रहीत प्रक्रिया निष्पादित करता हूं तो मुझे त्रुटि मिलती है

वहां पहले से ही एक वस्तु डेटाबेस

में 'mytablebackup' नाम मैं एक Print बयान जोड़ा गया है और निष्पादन ले जा रहा है अगर की शाखा "मौजूद नहीं है" है।

मैं क्या गलत कर रहा हूं?

+1

*** एसक्यूएल *** सिर्फ * स्ट्रक्चर्ड क्वेरी लैंग्वेज * है - कई डाटाबेस सिस्टम द्वारा प्रयुक्त भाषा है, लेकिन नहीं आ डेटाबेस उत्पाद ... बहुत सी बातें विक्रेता विशिष्ट हैं - तो हम वास्तव में करने की जरूरत है पता करें कि ** डेटाबेस सिस्टम ** (और कौन सा संस्करण) आप उपयोग कर रहे हैं (कृपया तदनुसार टैग अपडेट करें) .... –

+1

@marc_s मुझे लगता है कि यह 'db.schema.tbl' प्रारूप – Kermit

+2

पर आधारित MSSQL है 'अगर EXISTS (B.dbo.mytablebackup से 1 चुनें) '' mytablebackup' के भीतर कम से कम एक पंक्ति * जांचता है या नहीं। यह आपको नहीं बताता है कि तालिका स्वयं * मौजूद है (यदि तालिका मौजूद नहीं है, तो यह संकलन त्रुटि उत्पन्न करेगी) –

उत्तर

10

SQL सर्वर के लिए, आपको सिस्टम दृश्य sys.tables का उपयोग यह जांचने के लिए करना चाहिए कि तालिका मौजूद है या नहीं।

IF EXISTS(SELECT 1 FROM B.sys.tables WHERE name = 'mytablebackup') 
+0

धन्यवाद, एरिक। वह चाल है। – DeveloperM

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

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