萧忆勋 2014-10-15 16:54 采纳率: 0%
浏览 984

SQLServer 2008中怎样把所有数据库的结构相同的所有表的数据合并到一张表中?

问题:SQLServer 2008中怎样把所有数据库的结构相同的所有表的数据合并到一张表中?注意表的结构是相同的。
比如有10个数据库,他们的名字是有规律的,test1~test10 ,每个数据库中有200张表,表的结构相同,表名也是有规律的,分别是table1~table200,我想把这些数据发在一个数据库的一张表中,我觉得应该用游标来实现,但是我现在只能做到把一个数据库中的所有表放到一个表中,不能做到把所有数据库的表放在一个表中,求解答!!

还有就是存放所有数据库的所有表的那个系统表是哪个?我现在只知道每个数据库中存放本数据库的所有表的那个系统表。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 21:41
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要将多个数据库中具有相同结构的所有表合并到一个新的表中,可以使用以下步骤:

    步骤1: 创建新表

    首先,创建一个名为 common_tables 的新表,用于存储合并后的表信息。这个表将包含两个字段:

    • database_name(数据库名称)
    • table_name(表名称)

    例如:

    CREATE TABLE common_tables (
        database_name VARCHAR(50),
        table_name VARCHAR(50)
    );
    

    步骤2: 合并表

    接下来,遍历所有数据库,并为每个数据库创建一个临时表,其中包含所有表的信息。然后,将这些临时表连接在一起,得到最终的新表。

    示例 SQL 命令

    DECLARE @database_list VARCHAR(MAX) = 'test1, test2, test3';
    
    -- 遍历每个数据库
    WHILE LEN(@database_list) > 0
    BEGIN
        DECLARE @database_name VARCHAR(50) = SUBSTRING(@database_list, 1, INSTR(@database_list, ',', @database_list) - 1);
    
        -- 创建临时表,包含所有表的信息
        CREATE TABLE #temp_table (database_name VARCHAR(50), table_name VARCHAR(50))
        AS SELECT database_name, table_name FROM sys.tables WHERE database_name = @database_name;
    
        -- 连接临时表
        INSERT INTO common_tables (database_name, table_name)
        SELECT * FROM #temp_table;
        
        -- 清空临时表
        DELETE FROM #temp_table;
        
        -- 移除当前数据库列表的前缀
        SET @database_list = SUBSTRING(@database_list, INSTR(@database_list, ',', @database_list) + 1);
    END
    

    步骤3: 将结果插入到 common_tables 表中

    最后一步是将 common_tables 表中的所有记录插入到实际的 common_tables 表中。

    示例 SQL 命令

    INSERT INTO common_tables (database_name, table_name)
    SELECT database_name, table_name
    FROM common_tables;
    

    结论

    通过上述步骤,你可以将所有数据库中具有相同结构的所有表合并到一个单一的表中。这种方法依赖于在运行时动态地处理数据库列表和表名称,因此可能无法适用于所有情况。如果需要更灵活的方法,你可能需要考虑使用批处理或宏等工具。

    评论

报告相同问题?