首页 > 解决方案 > 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

标签: sqlsql-servermultiple-databases

解决方案


我会创建一个结合了 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;

推荐阅读