2015-05-17 26 views
5

Farklı sunucularda yaklaşık 200 farklı veritabanında ortak bir "Kullanıcı Etkinliği" tablosu var, bir tablodaki tüm veritabanlarındaki satırları tek bir deyimde seçmek mümkün müdür?Sorgu farklı bir veritabanında - Aynı tablo SQL Server 2012

Onların ina ana veritabanı/masanın üstünde olanlar veritabanları ve sunucuların listesi var,

cevap

5

Evet CustomersList gelen DBases gelen seç sunucuadı'nın, Dbname tarafından elde ancak bunları açıkça tüm bahsetmek gerekir edebilirsiniz:

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 

Bu, yalnızca Excel'de oluşturup SSMS'ye yapıştıracağım türden bir şey.

Daha sonra 200 veritabanında bu iyi bir tasarım olup olmadığını yeniden düşünmek isteyebilirsiniz. Bir saklı yordam kullanmak

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) 

Kolayca optimize edebilirsiniz:

+0

teşekkür: Ben kodunuzu modifiye yüzden

İki veritabanlarında adres tablo var. Daha zarif bir yolu var mı? Bir ana tablo/veritabanı üzerinde veritabanının bir listesi var. – Bill

+0

Zarif ile ne demek istediğine bağlı. @ ShA.t çözümü daha zarif mi? Sanmıyorum ama sen yapabilirsin! –

1

Sana bu sözdizimini kullanın öneriyoruz.

0

bu hatayı alıyorum: yakın

yanlış sözdizimi 'TÜM'

Ben kodunuzu çalıştırmayı ederken.

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)