2011-02-28 17 views
69

विभिन्न सर्वरों पर दो अलग-अलग डेटाबेस में दो टेबल हैं, मुझे कुछ प्रश्न पूछने के लिए उनसे जुड़ने की आवश्यकता है। आपके पास कौन से विकल्प हैं? मुझे क्या करना चाहिए?विभिन्न सर्वरों पर दो डेटाबेस में दो टेबलों में शामिल होने से डेटा क्वेरी करना

उत्तर

60

आपको सर्वर लिंक बनाने के लिए sp_addlinkedserver का उपयोग करने की आवश्यकता होगी। उपयोग के लिए reference documentation देखें। एक बार सर्वर लिंक स्थापित हो जाने के बाद, आप सामान्य रूप से क्वेरी का निर्माण करेंगे, बस अन्य सर्वर के साथ डेटाबेस नाम उपसर्ग कर रहे हैं। अर्थात:

-- FROM DB1 
SELECT * 
FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1 
    INNER JOIN [DB2].[MyDatabaseOnDB2].[dbo].[MyOtherTable] tab2 
     ON tab1.ID = tab2.ID 

लिंक को स्थापित है, तो आप भी OPENQUERY का उपयोग दूरस्थ सर्वर पर किसी SQL बयान निष्पादित करने के लिए कर सकते हैं और केवल डेटा वापस आपको ट्रांसफर। यह थोड़ा तेज़ हो सकता है, और यह दूरस्थ सर्वर को आपकी क्वेरी को अनुकूलित करने देगा। यदि आप ऊपर दिए गए उदाहरण में DB1 पर डेटा को अस्थायी (या इन-मेमोरी) तालिका में कैश करते हैं, तो आप इसे मानक तालिका में शामिल होने की तरह पूछने में सक्षम होंगे। उदाहरण के लिए:

-- Fetch data from the other database server 
SELECT * 
INTO #myTempTable 
FROM OPENQUERY([DB2], 'SELECT * FROM [MyDatabaseOnDB2].[dbo].[MyOtherTable]') 

-- Now I can join my temp table to see the data 
SELECT * FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1 
    INNER JOIN #myTempTable tab2 ON tab1.ID = tab2.ID 

कुछ और उदाहरण देखने के लिए documentation for OPENQUERY देखें। उपरोक्त उदाहरण बहुत बढ़िया है। मैं निश्चित रूप से इस विशिष्ट उदाहरण में पहली विधि का उपयोग करता हूं, लेकिन OPENQUERY का उपयोग करने वाला दूसरा विकल्प कुछ समय और प्रदर्शन को बचा सकता है यदि आप कुछ डेटा फ़िल्टर करने के लिए क्वेरी का उपयोग करते हैं।

+1

क्या यह php-mysql के साथ संभव है .. अगर हां तो क्या आप कृपया मुझे सुझाव दे सकते हैं कि मैं उस विकल्प के साथ कैसे बढ़ सकता हूं? – Jhanvi

+1

मुझे नहीं पता कि MySQL लिंक किए गए सर्वर का समर्थन करता है या नहीं। यह उत्तर माइक्रोसॉफ्ट एसक्यूएल सर्वर के लिए विशिष्ट है। –

+0

यदि कोई पोस्टग्रेएसक्यूएल उत्तर की तलाश में है, तो इसे आजमाएं: http://www.postgresql.org/docs/9.4/static/postgres-fdw.html – PJSCopeland

4

यदि आपके डीबीए द्वारा एक लिंक किए गए सर्वर की अनुमति नहीं है, तो आप OPENROWSET का उपयोग कर सकते हैं। पुस्तकें ऑनलाइन आपको आवश्यक वाक्यविन्यास प्रदान करेगी।

1

डीबीएमएस द्वारा दो टेबलों में से एक में सबसे अच्छा किया जाता है, इसलिए इसे इस तरह से किया जाना चाहिए। आप डेटाबेस में से किसी एक पर छोटी तालिका या इसके सबसेट को मिरर कर सकते हैं और फिर उनसे जुड़ सकते हैं। कोई भी ईटीएल सर्वर पर सूचनात्मक जैसे ऐसा करने का लुत्फ उठा सकता है लेकिन मुझे लगता है कि टेबल बहुत बड़े होने पर सलाह नहीं दी जाती है।

1

एक व्यावहारिक उद्यम परिप्रेक्ष्य से, सबसे अच्छा अभ्यास अपने डेटाबेस में डेटाबेस तालिका की प्रतिबिंबित प्रतिलिपि बनाना है, और उसके बाद केवल एक कार्य/proc को डेल्टा के हर घंटे अपडेट करें।

8

इस प्रयास करें:

SELECT tab2.column_name 
FROM [DB1.mdf].[dbo].[table_name_1] tab1 INNER JOIN [DB2.mdf].[dbo].[table_name_2] tab2 
    ON tab1.col_name = tab2.col_name 
1

मैं इस कोड के नीचे की कोशिश की और यह काम कर रहा ठीक

SELECT  TimeTrackEmployee.StaffID 
FROM   dbo.tblGBSTimeCard AS GBSTimeCard INNER JOIN 
         TimeTrak.dbo.tblEmployee AS TimeTrackEmployee ON GBSTimeCard.[Employee Number] = TimeTrackEmployee.GBSStaffID 
1

तो डेटाबेस लिंक विकल्प उपलब्ध नहीं है, एक और मार्ग आप ले सकता है के माध्यम से टेबल से जोड़ने के लिए है ओडीबीसी जैसे एमएस एक्सेस या क्रिस्टल रिपोर्ट्स और वहां शामिल होने के लिए।

0

आप निम्न की कोशिश कर सकते:

select customer1.Id,customer1.Name,customer1.city,CustAdd.phone,CustAdd.Country 
from customer1 
inner join [EBST08].[Test].[dbo].[customerAddress] CustAdd 
on customer1.Id=CustAdd.CustId 
0

हो सकता है कि हार्ड-कोडेड डेटाबेस नाम सबसे अच्छा तरीका हमेशा एक SQL- क्वेरी के भीतर नहीं है। इस प्रकार, समानार्थी जोड़ना एक बेहतर दृष्टिकोण होगा। यह हमेशा ऐसा नहीं होता है कि कई स्टेजिंग वातावरण में डेटाबेस का एक ही नाम होता है। वे प्रोडी, यूएटी, एसआईटी, क्यूए और इतने आगे पोस्टफिक्सेस द्वारा हो सकते हैं। इसलिए हार्ड-कोड किए गए प्रश्नों से अवगत रहें और उन्हें अधिक गतिशील बनाएं।

दृष्टिकोण # 1: उसी सर्वर पर डेटाबेस के बीच तालिकाओं को जोड़ने के लिए समानार्थी का प्रयोग करें।

दृष्टिकोण # 2: प्रत्येक डेटाबेस से डेटा एकत्रित करें और अपने कोड में शामिल हों। आपका डेटाबेस कनेक्शन स्ट्रिंग्स आपके ऐप-सर्वर कॉन्फ़िगरेशन का हिस्सा डेटाबेस या कॉन्फ़िगरेशन फ़ाइल के माध्यम से हो सकता है।

0

इस के लिए बस क्वेरी

select a.Id,a.type,b.Name,b.City from DatabaseName.dbo.TableName a left join DatabaseName.dbo.TableName b on a.Id=b.Id 

मैं databasename कहाँ लिखा नीचे का पालन करें, आप डेटाबेस के नाम को परिभाषित करने के लिए है। यदि आप एक ही डेटाबेस में हैं तो आपको डेटाबेस नाम को परिभाषित करने की आवश्यकता नहीं है, लेकिन यदि आप अन्य डेटाबेस में हैं तो आपको डेटाबेस नाम का पथ के रूप में उल्लेख करना होगा या यह आपको त्रुटि दिखाएगा। आशा है कि मैंने आपका काम आसान बना दिया है

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