2016-10-27 118 views
0

有沒有人見過任何示例SQL Server代碼「一般」使用多個表追加記錄?追加到幾個表

我們有一個奇怪的過程,我們在這裏使用一組十幾張「當前」數據和一組與「先前」數據匹配的表(我知道有更好的方法來做到這一點,但這是我必須處理的)。

我必須每週將記錄從「當前」表格集合移動到它們的「先前」對應表格,但我不想爲每個表格分別爲每個表格創建一系列所有字段都很難的INSERT INTO語句爲每一個編碼。

謝謝!

+0

某種類型的複製/同步? – jarlh

+0

是[這個腳本](http://stackoverflow.com/a/2179622/87698)你在找什麼? – Heinzi

+1

可能的重複[如何將一個表中的所有字段複製到另一個SQL Server 2005 Express中更寬的表?](http://stackoverflow.com/questions/2179463/how-can-i-copy-all-fields -of-one-table-to-another-wide-table-in-sql-server-200) – Heinzi

回答

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;