2011-07-02 16 views
6

मैं समझने की कोशिश कर रहा हूं कि एक हार्डकोडेड नाम का उपयोग किए बिना, उसी उदाहरण में किसी अन्य डेटाबेस का संदर्भ देने के लिए मैं उपनाम का उपयोग कैसे कर सकता हूं।एसक्यूएल सर्वर क्रॉस डेटाबेस उपनाम

परिदृश्य के रूप में नीचे है:

मैं डेटा को एक लेखा परीक्षा db जो किए गए सभी परिवर्तन रहता है के साथ एक डेटा db है। विभिन्न कारणों से, मैं ऑडिट डेटा को एक अलग डेटाबेस में रखना चाहता हूं, कम से कम नहीं क्योंकि यह काफी बड़ा हो सकता है और रिपोर्टिंग उद्देश्यों के लिए।

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

उदाहरण के लिए

:

mydevdata 
mydevaudit 

एक एसपी जैसे कौन से कॉल mydevauditmydevdata में मौजूद है, मैं एसपी को बदलने के लिए जब मैं जहां डाटाबेस के कहा जा सकता है परीक्षण करने के लिए जाना नहीं चाहते mytestdata और mytestaudit । फिर, विभिन्न कारणों के लिए, डेटाबेस नाम, अधिक बदल सकते हैं एक उदाहरणों रिक्त स्थान के साथ क्या करना आदि

तो अगर मैं mydevdata में प्रक्रिया थी:

proc A 
begin 

insert into mydevaudit.table.abc(somecol) 
select 1 

end 

जब मैं परीक्षण करने के लिए जाना है, मुझे नहीं पता

proc A 
begin 

insert into AUDITEBALIAS.table.abc(somecol) 
select 1 

end 

मैं: एक और नाम को संदर्भित करने की प्रक्रिया बदलने के लिए,

इसके बजाय मैं की तरह कुछ करने के लिए देख रहा हूँ (तर्क की खातिर कि क्या हुआ के लिए मान लेते हैं) बनना चाहता हूँ मुझे यह जानने में दिलचस्पी है कि मैं ऐसा कुछ कैसे कर सकता हूं, और समर्थक और विपक्ष।

इसके अलावा, डायनामिक एसक्यूएल एक विकल्प नहीं है।

आपकी मदद के लिए अग्रिम धन्यवाद।

+0

कृपया आप विस्तारित कर सकते हैं कि क्यों "डाइनेमिक एसक्यूएल एक विकल्प नहीं है" – Seph

उत्तर

11

आप का उपयोग करने के synonyms

CREATE SYNONYM WholeTableAliasWithDBetc FOR TheDB.dbo.TheTable 

इसका मतलब यह है स्थानीय डीबी में सभी वस्तु संदर्भ, कि डीबी करने के लिए स्थानीय हैं समानार्थी शब्द है कि आप से अन्य डेटाबेस को छिपाने के लिए छोड़कर कर सकता है।

आप ऑडिट डीबी में संग्रहित प्रक्रियाओं का भी उपयोग कर सकते हैं। वहाँ EXEC कि थोड़ा प्रयोग किया जाता है की एक 3 प्रपत्र जहां संग्रहीत proc नाम parametrise कर सकते हैं

DECLARE @module_name_var varchar(100) 
SET @module_name_var = 'mydevaudit.dbo.AuditProc' 
-- SET @module_name_var = 'whatever.dbo.AuditProc' 
EXEC @module_name_var @p1, @p2, ... 

जाहिर है आप जो कुछ भी डीबी आप

0

तरह मैं सिर्फ How to create Sql Synonym or "Alias" for Database Name? को यह पोस्ट किया है का उपयोग करने के module_name_var बदल सकते हैं जो एक ही स्थिति के लिए एक कामकाज है:

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

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

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

के लिए समान होना चाहिए

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

SELECT * FROM liveservername.databasename.dbo.tablename 

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

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