我有一个包含 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)
这里有两种方法。考虑第一个使用
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]