附加到多个表格

时间:2016-10-27 13:12:11

标签: sql-server tsql

有没有人见过任何示例SQL Server代码到#34;一般"使用多个表附加记录?

我们在这里有一个奇怪的过程,我们使用了一组十几个"当前"数据和一组匹配的表与"之前的"数据(我知道有更好的方法可以做到这一点,但这是我必须处理的事情)。

我必须每周从"当前"桌子到他们的"之前"对应表,但我不想为每个表分别创建一系列INSERT INTO语句,每个表都有硬编码的字段。

谢谢!

1 个答案:

答案 0 :(得分:1)

以下脚本将根据表名"表动态创建INSERT语句。那会吗?虽然它没有考虑源数据库名称或目标数据库,但我确信您可以根据需要调整脚本。

CREATE TABLE #table_of_tables(
    src_table_name SYSNAME NOT NULL PRIMARY KEY,
    dest_table_name SYSNAME NOT NULL
);
--INSERT INTO #table_of_tables(src_table_name,dest_table_name)VALUES('src_table','dest_table');

DECLARE @copy_stmts NVARCHAR(MAX) = (
    SELECT 
        ';INSERT INTO ' + QUOTENAME(dest_table_name) + '('+cols+') SELECT ' + cols + ' FROM ' + QUOTENAME(src_table_name)
    FROM 
        (
            SELECT
                tot.src_table_name,
                tot.dest_table_name,
                cols=STUFF(
                    (SELECT ','+QUOTENAME(c.COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS AS c WHERE c.TABLE_NAME=t.TABLE_NAME FOR XML PATH('')),
                    1,
                    1,
                    ''
                )
            FROM
                #table_of_tables AS tot
                INNER JOIN INFORMATION_SCHEMA.TABLES AS t ON
                    t.TABLE_NAME=tot.src_table_name AND
                    t.TABLE_TYPE='BASE TABLE'
        ) AS tbd
    FOR
        XML PATH('')
);

--SELECT @copy_stmts; --> select to verify statements
EXEC sp_executesql @copy_stmts; --> to launch the insert statements

DROP TABLE #table_of_tables;