在sql中连接表列表

问题描述 投票:0回答:1

我有一个包含 2 列的表:DBName、TableName。

数据库名称 表名
A 邮件
B 邮件
c 邮件
D 邮件

如何在 SQL 中连接该表中列出的所有表的内容?

并非所有表都具有相同的结构

我需要检索的列是 id、已发送、日期

我正在使用下面的代码,但当我运行它时,出现错误:“Msg 207 无效的列名”,但该列存在于所有表中

DECLARE @sql NVARCHAR(MAX)
DECLARE @result NVARCHAR(MAX)

SET @sql= ''

SELECT @sql = @sql + 'Select id, sent, date FROM' + QUOTENAME(DBName) + '.[dbo].' + QUOTENAME(TableName) + ' UNION ALL'
FROM #TableNames

Execute sp_executesql @sql, @result OUTPUT

SELECT * FROM (VALUES (@result)) AS RESULT(result)

sql sql-server sql-server-2012
1个回答
0
投票

这里有两种方法。考虑第一个使用

string_agg()

Declare @YourTable Table ([DbName] varchar(50),[tablename] varchar(50))  Insert Into @YourTable Values 
 ('A','mail')
,('B','mail')
,('c','mail')
,('D','mail')

-- First Method 
Select string_agg(quotename(DBName)+'.[dbo].'+quotename(tablename),' Union All ') from @YourTable


-- Second/Dated Method
Declare @SQL varchar(max)=''

Select @SQL = @SQL + ' Union All '+ quotename(DBName)+'.[dbo].'+quotename(tablename)
 From  @YourTable

Select @SQL = stuff(@SQL,1,11,'')

双双回归

[A].[dbo].[mail] Union All [B].[dbo].[mail] Union All [c].[dbo].[mail] Union All [D].[dbo].[mail]
© www.soinside.com 2019 - 2024. All rights reserved.