2009-01-14 18 views
27

मैं ms sql 2008 का उपयोग कर रहा हूं और डेटाबेस नाम बनाने की कोशिश कर रहा हूं जो किसी अन्य डेटाबेस का संदर्भ देता है। उदाहरण के लिए 'देव', 'टेस्ट', 'डेमो' डेटाबेस नाम होंगे जो मैं अपनी एकाधिक कॉन्फ़िगरेशन फ़ाइलों से संदर्भित कर सकता हूं, लेकिन प्रत्येक नाम 'db20080101' या 'db20080114' जैसे किसी अन्य डेटाबेस को इंगित करेगा।डाटाबेस नाम के लिए एसक्यूएल समानार्थी या "उपनाम" कैसे बनाएं?

[संपादित करें] कॉन्फ़िगरेशन में से कुछ अनुप्रयोगों है कि मैं कोड को नियंत्रित करने और कुछ नहीं कर रहे हैं के लिए कर रहे हैं (उदा। एमएस रिपोर्टिंग सेवा डेटा स्रोत फ़ाइल कॉन्फ़िगरेशन) [/ संपादित करें]

ऐसा लगता है कि sqlserver केवल के लिए समानार्थी शब्द का समर्थन करता है देखें, टेबल, स्पोक, या फंक्शन। और उपनाम 'टेबल और कॉलम नामों के लिए हैं।

क्या ऐसा करने का कोई तरीका है कि मैं दस्तावेज़ों में चूक गया? किसी के पास कामकाज पर कोई सुझाव है?

+2

+1 हमारे मामले में हम एक DB करने वाली डीबी कॉल करना है;।। लक्ष्य सर्वर टेस्ट बनाम उत्पादन के आधार पर, और अलग हम हमेशा एक रिलीज – STW

उत्तर

4

उपयोग 3 हिस्सा अंकन और मेज पर निर्भर उर्फ, उदाहरण के

select * from tempdb.dbo.sysobjects a 
join master.dbo.sysobjects b on a.id = b.id 
+0

मैं तालिकाओं में से एक के लिए इस की कोशिश की के साथ सभी संदर्भों को बदलने के लिए याद करने के लिए नहीं करना चाहते हैं और यह जीआर काम किया खाना खा लो। हालांकि, मुझे लगता है कि मूल DB में हर तालिका, समारोह, देखने और sproc के लिए नए DB में एक पर्याय बनाना होगा? मुझे 5 या 6 कॉन्फ़िगरेशन फाइलें मिली हैं, इसलिए मुझे लगता है कि उन्हें बदलना कम ओवरहेड होगा। –

1

मैं इस एक और कॉन्फ़िग फ़ाइल उपयोग करने के समान कुछ किया है।

नई कॉन्फ़िगरेशन फ़ाइल उस सामान्य डेटाबेस (डीबी नाम, उपयोगकर्ता नाम, पासवर्ड इत्यादि) से कनेक्ट करने के लिए आवश्यक सभी जानकारी के लिए आपके सामान्य नाम को मानचित्र करती है और फिर आपका कनेक्शन फ़ंक्शन आपके सामान्य नाम को तर्क के रूप में लेता है।

db.config:

DEV_DB_NAME = db20080101 
DEV_DB_USER = dev_user 
DEV_DB_PASS = dev_pass 
TEST_DB_NAME = db20070101 
TEST_DB_USER = test_user 
TEST_DB_PASS = test_pass 

कनेक्शन कोड:

db_connection get_connection(string prefix) { 
    db_connection db_conn = new db_connection; 
    string db_name = get_config_value(config_path, prefix + "_DB_NAME"); 
    string db_user = get_config_value(config_path, prefix + "_DB_USER"); 
    string db_pass = get_config_value(config_path, prefix + "_DB_PASS"); 

    db_conn.connect(db_name, db_user, db_pass); 

    return db_conn; 
} 

तो फिर तुम सिर्फ get_connection() तर्क के रूप में अपने डाटाबेस उर्फ ​​साथ कहते हैं।

+0

अच्छा विचार है, लेकिन उपयोग में आवेदनों में से कुछ मेरा नहीं हैं और मैं नहीं कर सकते पर नियंत्रण कैसे वे कनेक्शन स्ट्रिंग उत्पन्न (यानी एमएस रिपोर्टिंग सेवा)। मैंने इसे प्रतिबिंबित करने के लिए अभी अपना प्रश्न अपडेट किया है। –

+0

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

1

एक लिंक किए गए सर्वर का उपयोग करके इसे अनुकरण करने का एक तरीका है। यह मानता है कि आपके पास दो SQL सर्वर हैं जो डाटाबेस के उसी सेट के साथ विकास/परीक्षण और एक लाइव के लिए हैं। अपने विकास/परीक्षण सर्वर पर

  1. ओपन SQL सर्वर प्रबंधन स्टूडियो
  2. राइट क्लिक करें सर्वर वस्तुओं> लिंक सर्वर
  3. चुनें नई लिंक्ड सर्वर ...
  4. सामान्य पृष्ठ
  5. का चयन करें निर्दिष्ट करें उर्फ ​​लिंक्ड सर्वर क्षेत्र में नाम - यह सामान्य रूप से प्रदाता
  6. के रूप में अपने लाइव सर्वर
  7. चुनें एसक्यूएल मूल क्लाइंट का नाम होगा के लिए sql_server दर्ज उत्पाद का नाम
  8. डेटा स्रोत में विकास सर्वर
  9. जोड़ें का नाम निर्दिष्ट करें सुरक्षा और सर्वर विकल्प स्वाद के लिए
  10. ठीक क्लिक करें

ऊपर SQL सर्वर 2005 के लिए है, लेकिन के लिए 2008

समान होना चाहिए एक बार जब आप यह कर लें तो आप इस तरह एसक्यूएल लिख सकते हैं:

SELECT * FROM liveservername.databasename.dbo.tablename 

अब जब आपकी लिपियों को सर्वर से जुड़े सर्वर के साथ विकास सर्वर पर चलाया जाता है तो वे विकास सर्वर से डेटा खींचकर सही ढंग से काम करेंगे और जब लाइव सर्वर पर सटीक समान स्क्रिप्ट चलती हैं तो वे सामान्य काम करेंगे ly।

+1

इसके लिए एक हार्डकोडेड डेटाबेस नाम की आवश्यकता है। –

0

मैं जानता हूँ कि यह शायद सभी स्थितियों में मदद नहीं करेगा, लेकिन आप अभी भी विचारों का उपयोग करने का विकल्प होता है। जब तक कि इसकी उचित पहचान कुंजी (प्राथमिक कुंजी) हो, तब तक आप एक दृश्य में सम्मिलित, हटा, अद्यतन, चयन कर सकते हैं। यदि आप इसे किसी अन्य डेटाबेस पर इंगित करते हैं, तो आपको अलग-अलग स्कीमा प्राप्त करने के लिए ड्रॉप और फिर से बनाना चाहिए (यदि आप परीक्षण और/या उत्पादन में स्कीमा में परिवर्तन करते समय उत्पादन और परीक्षण के बीच काम कर रहे हैं।

समानार्थी शब्द उपयोगी हैं जब आप किसी अन्य डेटाबेस के लिए जा रहा है और एक 3 या 4 भाग वाला नाम है, लेकिन जब आप इसे बनाना चाहते हैं ताकि आप एक सेट नाम हो सकता है कर रहे हैं, किसी लिंक किए गए सर्वर भी काम करेंगे जो आप यदि तालिका नाम एक निश्चित नाम का उपयोग करने देगा दोनों डेटाबेस में ही कर रहे हैं और तुम सिर्फ prod और परीक्षण के बीच की ओर इशारा करते रहे

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