sql - SQL - 从多个数据库中选择
问题描述
我有 10 个数据库都在同一个实例和架构中,并且具有相同的表。
希望创建一个SELECT
可以使用数据库名称变量并将所有记录返回到单个数据集中的查询。
我一直在环顾四周并将以下内容放在一起作为测试(真正的 select 语句要大得多,有多个连接)
此测试确实有效,但它为每个数据库返回两个结果集。
有没有办法将结果组合成一个集合,还是我使用了错误的方法?
提前致谢
DECLARE @DB_NAME VARCHAR(6);
DECLARE CURSOR_ALLDB_NAMES CURSOR FOR
SELECT name
FROM sys.databases
WHERE name IN ('CN2DAT', 'AU1DAT')
OPEN CURSOR_ALLDB_NAMES
FETCH NEXT FROM CURSOR_ALLDB_NAMES INTO @DB_NAME
WHILE @@Fetch_Status = 0
BEGIN
EXEC ('SELECT * FROM ' + @DB_NAME + '.dbo.ICITEM')
-- EXEC ('USE '+ @DB_NAME + ' SELECT * from dbo.ICITEM')
FETCH NEXT FROM CURSOR_ALLDB_NAMES INTO @DB_NAME
END
CLOSE CURSOR_ALLDB_NAMES
DEALLOCATE CURSOR_ALLDB_NAMES
解决方案
我会创建一个结合了 select 语句的视图。例如
CREATE VIEW v_ICITEM
AS
SELECT * FROM CN2DAT.dbo.ICITEM
UNION ALL
SELECT * FROM AU1DAT.dbo.ICITEM
go;
您还可以将源数据库作为一列包含:
CREATE VIEW v_ICITEM
AS
SELECT 'CN2DAT' AS Db, * FROM CN2DAT.dbo.ICITEM
UNION ALL
SELECT 'AU1DAT', * FROM AU1DAT.dbo.ICITEM
go;
推荐阅读
- java - ajax url 在 localhost 上运行良好,但在服务器 java servlet tomcat 托管服务器上给出 404
- c - 打印文件中所有字符串的 k-mer
- php - 如何计算每种成分的量?
- javascript - 按名称查找通过 POST 打开的子窗口
- javascript - 有什么方法可以发送 post 请求以在 MongoDB 中检查和插入值以做出反应?
- java - BroadcastReceiver 的“onReceive”方法永远不会被调用
- sql-server - 有没有类似 CHARINDEX 的表达式语句?
- mysql - 无法使用更新语句更改 mysql 用户密码
- postgresql - 如何在 postgres 中的选择(或插入)查询期间将 UUID 转换为 UUID5?
- thymeleaf - 如何在 Thymeleaf 中爆炸字符串