2016-08-23 3 views
1

動的SQLですべてのテーブルを結合する方法がわかりません。全て同一の構造(一方のみvarcharカラム動的SQL - すべてのテーブル(テーブルの数は動的に作成されます)

[Line] 

)を有する - 問題は、私は、テーブルの数DBに挿入だということです。私はそれが挿入されたテーブルの数であるかどうかはわかりません - それはプロジェクトによって異なります。しかし、私はSQLでプロセスを自動化したい。

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 

私はさらに、私はいくつかが[ROWNUM】すなわち、各テーブルのIDとして機能することができる追加している、これらのテーブルを見つけるために、このクエリを使用してい

私はすべてのテーブルを一緒にマージしたいと思います。 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) 
関連する問題