2016-12-15 86 views
0

我們有一個可怕的設計數據庫,其中有一些程序,每週都會生成新表格,並且已經這樣做了幾年。它有一個SQL腳本,通過對各種表格的查詢獲取200列以上的數據,將其全部轉儲到一個名爲Selections的表中,然後在完成後,您必須每週手動重命名該表(Selections_Week001,Selections_Week002等)。現在我們有大約100多張桌子。我想要做的就是把所有的數據放到一張表中,列中有一列指明其原始源表(001,002等),這樣我就可以擺脫所有這些單獨的表。有沒有辦法使用一些SQL腳本來做到這一點,或者我將不得不手動編輯並運行100個附加查詢?將表格組合成一個

+1

你可以在一個查詢中將它們全部結合在一起,並執行一次插入,但是如果你有大量數據正在進行,那麼這將成爲一個殺手。我會創建一個腳本,每次都可以創建一個表格(您可以輕鬆地在Excel中創建大量腳本)。我更喜歡通過一次性的方法來控制這個問題 –

+0

我的觀點:我會考慮使用一些腳本語言來實現這一點,因爲動態sql是不必要的繁瑣。 – AndreasT

+0

我只是希望寫一些能動態獲取每個表名並自動爲所有表添加附加內容,而不必重寫它100次 –

回答

1

試試這個對我來說,測試數據運行良好:

select * 
into Selections_Total 
from Selections_Week001 
where 1=0 
alter table Selections_Total 
add Original_Table varchar(64) 

--select * From Selections_Total 

declare @sql varchar(max) 
select @sql = COALESCE(@sql + ' UNION ALL select *, ''' + name + ''' from ', 'select *, ''' + name + ''' from ') + name 
from sys.tables where name like 'Selections_Week%' 

--select @sql 
insert into Selections_Total 
exec(@sql) 

UPD:起初錯過with a column indicating its original source table。現在修復。

+0

」'哪裏1 = 0'「---這應該做什麼? – WillardSolutions

+0

從表中選擇0行只複製結構 –

+0

不錯,在我的桌子上運行良好,感謝您的幫助,Andrey! –