Abfrage Über verschiedene database – Gleiche Tabelle SQL server 2012

Ich habe eine gemeinsame Tabelle "User Activity" in etwa 200 verschiedenen databaseen auf verschiedenen servern, ist es möglich, Zeilen aus allen databaseen für diese Tabelle in einer statement auszuwählen?

Ich habe eine list dieser databaseen und server, auf denen sie sich in einer Hauptdatenbank / Tabelle befinden, können sie per Select servername, dbname von DBases von CustomersList erhalten

Ja, aber du musst sie ausdrücklich erwähnen:

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 

Dies ist die Art von Dingen, die ich nur in Excel build und in SSMS insert würde.

Dann möchten Sie vielleicht überdenken, ob es ein gutes Design ist, dies in 200 databaseen zu haben.

Ich schlage vor, diese Syntax zu verwenden:

 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) 

Sie können es leicht optimieren, um in einer gespeicherten Prozedur zu verwenden.

Ich bekomme diesen Fehler:

Falsche Syntax in der Nähe von 'ALL'

Während ich versuche, deinen Code zu laufen.

Ich habe Adresse Tabelle in zwei databaseen, so dass ich Ihren Code als geändert:

  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)