我需要在同一服务器上的所有数据库中运行一个简单的select语句。我有大约30-40个数据库。该表在所有数据库中具有相同的结构。
attr()
请告诉我如何从所有数据库中获取记录?顺便说一句,我使用的是SQL Server
答案 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
...