如何在同一服务器中的所有数据库中运行单个select语句

时间:2015-08-04 14:58:16

标签: sql sql-server database

我需要在同一服务器上的所有数据库中运行一个简单的select语句。我有大约30-40个数据库。该表在所有数据库中具有相同的结构。

attr()

请告诉我如何从所有数据库中获取记录?顺便说一句,我使用的是SQL Server

4 个答案:

答案 0 :(得分:2)

Exec sp_msforeachdB 'select top 5 cola from dbo.tablea'

答案 1 :(得分:1)

如果希望将结果放在单个结果集中,则可以利用系统视图生成动态sql。这也无需使用任何循环。

declare @SQL nvarchar(max) = ''

select @SQL = @SQL + 'select * from ' + db.name + '.table1 where condition union all '
from sys.databases db
--optionally add a where clause here to filter out certain databases
order by db.name

set @SQL = left(@SQL, len(@SQL) - 10)

select @SQL 
--uncomment the dynamic sql call when satisfied the sql is correct.
--exec sp_executesql @SQL

答案 2 :(得分:1)

我会使用游标,sp_msforeachdB在跳过数据库方面声名狼借。

带光标的解决方案看起来像这样......

DECLARE @DB_Name SYSNAME;
DECLARE @Sql NVARCHAR(MAX);

DECLARE Cur CURSOR LOCAL FAST_FORWARD FOR 
SELECT Name
FROM sys.databases
WHERE name NOT IN ('master', 'tempdb','model','msdb')

OPEN Cur 
FETCH NEXT FROM Cur INTO @DB_Name

WHILE (@@FETCH_STATUS = 0)
BEGIN

   SET @Sql =  N' select * from '+QUOTENAME(@DB_Name)
             + N'.[sechmaName].table1 where condition'

    Exec sp_executesql @Sql
  FETCH NEXT FROM Cur INTO @DB_Name

END

CLOSE Cur;
DEALLOCATE Cur;

答案 3 :(得分:0)

试试这个:按照下面的SQL中提到的那样添加所有数据库:

SELECT a, b, c FROM Database1.Schema1.Table1
UNION 
SELECT a, b, c FROM Database2.Schema2.Table2
...