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

Dynamic SQL - union all tables (number of tables is dynamically created)

我不知道如何将所有 table 与动态 SQL 合并。 问题是我在数据库中插入了一些 tables - 都具有相同的结构(只有一个 varchar 列

[Line]

)。我不知道那会是插入的 table 的数量——这取决于项目。但我想在 SQL 中自动执行该过程。

我正在使用此查询来查找那些 table,另外我添加了一些 [RowNum] 可以作为每个 table 的 ID:

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

这个查询 returns:

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

我想将所有 table 合并在一起。我试图在 while 循环中写入一些插入,但它没有用。我发现我需要动态 SQL。

你能推荐点什么吗?我试图找到一些例子,但由于 tables 的列表一开始是未知的,所以它们都失败了,所以它也需要动态创建。

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)