SQL

2011-03-16 11 views
7

में वर्तमान में डेटाबेस नाम को एक चर के रूप में सेट करना, मैं कुछ व्यवसाय नियमों के आधार पर एक डीबी के बीच डेटा माइग्रेशन का थोड़ा सा कर रहा हूं।SQL

मेरे पास यह विशाल स्क्रिप्ट है जिसे मैं लिख रहा हूं जहां मैं कई बार डेटाबेस दोनों का संदर्भ दे रहा हूं। समस्या यह है कि यह डेटा माइग्रेशन वर्तमान में विकास में है, किसी बिंदु पर मैं इसे दो अलग-अलग डेटाबेस के साथ उत्पादन में करना चाहता हूं।

इसके बजाय इतना

Insert Into Database2.dbo.Table1  
Select * from Database1.dbo.Table1 

की तरह सीधे डेटाबेस नाम को संदर्भित करने का मैं किसी भी तरह सिर्फ स्क्रिप्ट के शुरू में डेटाबेस संदर्भित करने के लिए करना चाहते हैं। इसलिए जब मैं डेटाबेस बदलता हूं तो मैं केवल एक चर बदल सकता हूं।

क्या यह संभव है?

+0

केवल इसका मतलब है कि मुझे गतिशील एसक्यूएल पर निर्भर करता है। अन्यथा, एक स्क्रिप्ट बनाएं। इसे कॉपी करें, और इच्छित स्रोत और लक्ष्य डेटाबेस संदर्भों के संदर्भों पर प्रतिस्थापन करें। –

+0

संभावित डुप्लिकेट [टी-एसक्यूएल में डेटाबेस नाम के लिए चर का उपयोग कैसे करें] (http://stackoverflow.com/questions/727788/how-to-use-variable-for-डेटा-name-in-t-sql) – cdonner

उत्तर

9

उपयोग SQLCMD variables:

:setvar dbfrom database1 
:setvar dbto database2 

Insert into [$(dbto)].dbo.Table1 
select * from [$(dbfrom)].dbo.Table2; 

इस वाक्य रचना sqlcmd.exe में काम करता है (स्क्रिप्ट से), और साथ ही प्रबंधन स्टूडियो में, Editing SQLCMD Scripts with Query Editor देखते हैं। पटकथा भी आप कमांड लाइन से चर सेट करने के लिए अनुमति देता है:

sqlcmd /E /S server /i script.sql /v dbfrom=database1 /v dbto=database2 

मैं भी Google Code पर स्रोत के रूप में एक library that allows you to use sqlcmd variables and scripts from applications उपलब्ध है।

+0

धन्यवाद कि यह अच्छा है। हालांकि इंटेलिजेंस काम करना बंद कर देता है लेकिन मुझे नहीं लगता कि वहां एक समाधान है जो इसके लिए पूरा करता है। – Diskdrive

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