2015-05-17 13 views
5

मेरे पास अलग-अलग सर्वरों पर लगभग 200 अलग-अलग डेटाबेस में एक सामान्य तालिका "उपयोगकर्ता गतिविधि" है, क्या एक तालिका में उस तालिका के सभी डेटाबेस से पंक्तियों का चयन करना संभव है?विभिन्न डेटाबेस में क्वेरी - समान तालिका SQL सर्वर 2012

मैं उन डेटाबेस और सर्वर वे इना मुख्य डाटाबेस/मेज पर कर रहे हैं की एक सूची है, CustomersList

उत्तर

5

हाँ से DBases से Servername, dbname करें द्वारा प्राप्त कर सकते हैं, लेकिन आप उन्हें स्पष्ट रूप से सभी का उल्लेख करना होगा:

SELECT COl1,Col2,Col3 FROM Database1.schema.Table1 
UNION ALL 
SELECT COl1,Col2,Col3 FROM Database2.schema.Table1 
UNION ALL 
SELECT COl1,Col2,Col3 FROM Database3.schema.Table1 
UNION ALL 
....... 
... 
SELECT COl1,Col2,Col3 FROM Database200.schema.Table1 

यह ऐसी चीज है जिसे मैं एक्सेल में बस बनाना और एसएसएमएस में पेस्ट करना चाहता हूं।

फिर आप पुनर्विचार करना चाहेंगे कि 200 डेटाबेस में यह एक अच्छा डिज़ाइन है या नहीं।

+0

धन्यवाद:

मैं तो मैं के रूप में अपने कोड को संशोधित दो डेटाबेस में पता तालिका है। क्या कोई और सुरुचिपूर्ण तरीका है? मेरे पास एक मुख्य तालिका/डेटाबेस पर डेटाबेस की एक सूची है। – Bill

+0

सुरुचिपूर्ण द्वारा आपका क्या मतलब है निर्भर करता है। @ ShA.t समाधान अधिक सुरुचिपूर्ण है? मुझे ऐसा नहीं लगता लेकिन आप कर सकते हैं! –

1

मेरा सुझाव है कि आप इस वाक्य विन्यास का उपयोग करने के लिए:

DECLARE @tableName nvarchar(256) = 'Table1' 
DECLARE @sql nvarchar(max) = '' 

SELECT @sql = @sql + 'SELECT * FROM [' + dbs.name + ']..[' + @tableName + '] ' 
        + CASE WHEN @sql <> '' THEN 'UNION ALL ' ELSE '' END 
FROM sys.sysdatabases dbs 
WHERE dbs.name NOT IN ('master', 'tempdb', 'msdb', 'model') 

EXEC(@sql) 

आप आसानी से यह अनुकूलन कर सकते हैं एक संग्रहीत प्रक्रिया में उपयोग करने के लिए।

0

मैं इस त्रुटि हो रही है:

गलत पास वाक्य रचना 'सभी'

जब मैं अपने कोड को चलाने के लिए प्रयास करें।

DECLARE @tableName nvarchar(256) = 'dbo.Address' 

DECLARE @sql nvarchar(max) = '' 

SELECT @sql = @sql + 'SELECT * FROM [' + dbs.name + ']..[' + @tableName +  '] ' 
       + CASE WHEN @sql <> '' THEN 'UNION ALL ' ELSE '' END 
FROM sys.sysdatabases dbs where dbs.dbid in (7,8) 

and dbs.name NOT IN ('master', 'tempdb', 'msdb', 'model','SSISall') 

EXEC(@sql) 
संबंधित मुद्दे