sql - 如何跨多个数据库使用临时表?
问题描述
我的脚本在这里使用特定名称遍历我的所有数据库并收集计数。这可行,但我的问题是我想将所有结果合并到集合中,以便我可以以 CSV 或类似格式导出。否则要从结果视图中复制大量数据。
我试图声明一个@temp 表,文件的开头,然后插入其中,但它不起作用。我怀疑对每个数据库的调用都在一个新的连接中,因此它失败了。我可以制作一个可以写回的内存表,然后从中选择所有内容吗?
DECLARE @DB_Name varchar(100)
DECLARE @Command nvarchar(200)
DECLARE database_cursor CURSOR FOR
SELECT name
FROM MASTER.sys.sysdatabases
where name like '%_MSCRM%'
OPEN database_cursor
FETCH NEXT FROM database_cursor INTO @DB_Name
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @Command = 'SELECT ' + '''' + @DB_Name + '''' + ' as Tenant, count(*) as Count FROM [' + @DB_Name + '].[dbo].[si_RecruitBase]'
EXEC sp_executesql @Command
FETCH NEXT FROM database_cursor INTO @DB_Name
END
CLOSE database_cursor
DEALLOCATE database_cursor
解决方案
您可以在不创建自己的光标的情况下执行此操作。
-- Create a temp table to store the results
CREATE TABLE #Results(Tenant NVARCHAR(255), Amount INT)
-- use sp_MsForEachDb to loop over all databases
exec sp_MSForEachDb '
-- Filter on your specific database
IF ''?'' LIKE ''%_MSCRM%''
BEGIN
INSERT INTO #Results(Tenant, Amount)
SELECT ''?'' as Tenant, count(*) as Count FROM [?].[dbo].[si_RecruitBase]
END
'
-- show the results
SELECT *
FROM #Results
推荐阅读
- java - Java g.drawString() 调用导致初始化非常缓慢
- c# - 最新 Xamarin 项目的上下文未投入活动
- amazon-web-services - 读取 DDB 记录以进行迁移
- xamarin - 将 markdown 文本加载到 Xamarin.Forms 标签中
- android - 如何在移动到下一行之前等待异步任务完成?
- html - 如何防止打印时出现分页?
- android - 膨胀类 com.google.android.material.tabs.TabLayout 时出错
- javascript - 反应 js 获取 API
- mysql - 将本地 mysql 与远程 mssql 同步
- php - 在 VOLLEY 中同时发送帖子和获取请求