有没有人见过任何示例SQL Server代码到#34;一般"使用多个表附加记录?
我们在这里有一个奇怪的过程,我们使用了一组十几个"当前"数据和一组匹配的表与"之前的"数据(我知道有更好的方法可以做到这一点,但这是我必须处理的事情)。
我必须每周从"当前"桌子到他们的"之前"对应表,但我不想为每个表分别创建一系列INSERT INTO语句,每个表都有硬编码的字段。
谢谢!
答案 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;