动态SQL - 联合所有表(动态创建表的数量)

时间:2016-08-23 15:26:58

标签: sql exec

我不知道如何将所有表与动态SQL结合起来。 问题是我在db中插入了许多表 - 都具有相同的结构(只有一个varchar列

[Line]

)。我不知道插入的表数是多少 - 这取决于项目。但我想在SQL中自动化该过程。

我使用此查询查找这些表格,另外我添加了一些可作为每个表格ID的[RowNum]:

  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 个答案:

答案 0 :(得分: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)