2016-08-23 46 views
1

我不知道如何將所有表與動態SQL聯合。 問題是,我插入到數據庫多個表的 - 都具有相同的結構(只有一個VARCHAR列動態SQL - 聯合所有表(動態創建表的數量)

[Line] 

)。我不知道這將是插入的表的數量 - 這取決於項目。但我想在SQL中自動化該過程。

我使用這個查詢來找到這些表,另外我添加一些[ROWNUM],可作爲各表的ID:

SELECT 
    ROW_NUMBER() OVER (ORDER BY Name) AS [RowNum], 
    [Name] AS [Name] 
    INTO #all_tables_with_ids 
    FROM #all_tables 

該查詢將返回:

RowNum |  Name 
    ------------------------ 
     1  |  Table 1 
     2  |  Table 2 
     3  |  Table 3 
     4  |  Table 4 

我想將所有表合併在一起。我試圖在while循環中寫入一些插入,但它不起作用。我發現我需要動態SQL。

你能提出一些建議嗎?我試圖找到一些例子,但所有這些例子都失敗了,原因是表的列表在開始時並不知道,所以它也需要動態創建。

回答

1

Demo here:

create table #test 
(
    RowNum int, 
    Name varchar(100) 
) 

insert into #test 
select 1,quotename('table1') 
union all 
select 2,quotename('table2') 


declare @sql nvarchar(max) 
set @sql='select somecol from tbl union all ' 

declare @sql1 nvarchar(max) 

;with cte 
as 
(select @sql as ql,name,rplc 
from 
#test t1 
cross apply 
(select replace(@sql,'tbl',name) as rplc from #test t2 where t1.rownum=t2.rownum)b 
) 
select @sql1= stuff(
(select ''+rplc 
from cte 
for xml path('') 
),1,0,'') 

set @sql1=substring(@sql1,1,len(@sql1)-10) 

print @sql1 

--exec(@Sql1)