我不知道如何将所有表与动态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。
你能说点什么吗?我试图找到一些例子,但由于表的列表在开始时是未知的,所以它们都失败了,所以它也需要动态创建。答案 0 :(得分:1)
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)