2010-01-26 10 views
22

मैं किसी विशेष परिस्थिति में पहुँचता बनाएँ,TSQL: एक राय यह है कि विभिन्न डेटाबेस

डेटाबेस A में तालिका ta में उदाहरण के लिए

, यह सभी उत्पादों को संग्रहीत करता है मैं डेटाबेस में

table ta(
id, 
name, 
price 
) 
तालिका tb में

खरीद B, यह सब उत्पाद है कि लोगों को खरीद सकते हैं शामिल

table tb(
id, 
name, 
price 
.... 
) 

मैं डेटाबेस में एक दृश्य बना सकते हैं A उन सभी उत्पादों को सूचीबद्ध करने के लिए जिन्हें मैंने खरीदा नहीं है?

उत्तर

35

हाँ आप कर सकते हैं - टी-एसक्यूएल सिंटैक्स किसी भी अन्य क्रॉस डेटाबेस कॉल (उदाहरण के लिए संग्रहीत प्रक्रिया के भीतर) के समान है।

दूसरे डेटाबेस में अपने टेबल संदर्भित करने के लिए आप बस की जरूरत है:।।

[DatabaseName] [स्कीमा] [TableName]

तो तुम ऊपर कुछ के साथ

CREATE VIEW [dbo].[YourView] 
as 
select 
a.ID, 
a.SomeInfo, 
b.SomeOtherInfo 
from TableInA a 
join DatabaseB.dbo.TableInB b 
on -- your join logic goes here 

तरह खत्म होगा ध्यान दें कि यह केवल उसी सर्वर पर काम करेगा - यदि आपके डेटाबेस अलग-अलग सर्वर पर हैं तो आपको एक लिंक सर्वर बनाना होगा।

+0

मुझे कोशिश करने दें .. हाँ..क्या मेरा डेटाबेस एक ही सर्वर में है। – jojo

+1

मैं यह जोड़ना चाहता हूं कि मैंने ऐसा कुछ किया है। हालांकि, यह ध्यान दिया जाना चाहिए कि यदि आप डेटाबेस बनाने का नाम निर्दिष्ट करना चाहते हैं, तो आप 'CREATE VIEW abc.dbo.YourView' का उपयोग नहीं कर सकते हैं। आपको इसके बजाय 'यूएसई एबीसी' चलाएं और फिर 'देखें dbo.YourView' बनाएं अन्यथा, आपको एक त्रुटि मिलेगी। –

5

हाँ, विचारों तीन भाग नामित वस्तुओं देख सकते हैं:

create view A.dbo.viewname as 
select ... from A.dbo.ta as ta 
join B.dbo.tb as tb on ta.id = tb.id 
where ... 

बैकअप की वजह से पार डाटाबेस क्वेरी के साथ सड़क के नीचे समस्याओं होगा/स्थिरता, रेफेरेंन्शिअल सत्यनिष्ठा समस्याओं और संभवतः mirorring विफलता है, लेकिन उन समस्याओं को बहाल डीबीएस में डेटा विभाजित होने में अंतर्निहित हैं।

3

जैसा कि अन्य उत्तरों इंगित करते हैं, आप {LINKED_SERVER।} DATABASE.SCHEMA.OBJECT नोटेशन का उपयोग कर सकते हैं।

आपको यह भी पता होना चाहिए कि क्रॉस-डेटाबेस ownership chaining डिफ़ॉल्ट रूप से अक्षम है।

तो डेटाबेस के भीतर, दृश्य पर चयन देने से उपयोगकर्ता को अंतर्निहित तालिकाओं पर चयन नहीं हो सकता है, जो अभी भी दृश्य से चयन करने के लिए है। यह किसी अन्य डेटाबेस में काम नहीं कर सकता है जहां उपयोगकर्ता को अंतर्निहित तालिका पर अनुमति नहीं है।

+0

हां। दृश्य को एक्सेस करने वाले SQL उपयोगकर्ता को किसी भी संदर्भित डेटाबेस के लिए पढ़ने की अनुमति की आवश्यकता होती है। – Jecoms

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