我列了大概300张table。
每个表都有日期列INSERT_DATE
(类型为Varchar
)。
我想确认一下table上的日期是否相同。
比如说-第一张table:
| 插入日期|
| - ------|
| 小行星2022|
| 小行星2022|
| 小行星2022|
第二个表:
| 插入日期|
| - ------|
| 小行星2022|
| 小行星2022|
| 小行星2022|
第三桌:
| 插入日期|
| - ------|
| 小行星20221230|
| 小行星20221230|
| 小行星20221230|
我的查询所需的结果:
| 表名|日期|
| - ------| - ------|
| 第一个_表格|小行星2022|
| 第二_工作台|小行星2022|
| 第三_表格|小行星20221230|
我很困惑如何使它全部"自动",而不是一个一个地查询。
好像我得花很长时间
SELECT TOP 1 INSERT_DATE
FROM FIRST_TABLE
那么
SELECT TOP 1 INSERT_DATE
FROM SECOND_TABLE
那么
SELECT TOP 1 INSERT_DATE
FROM THIRD_TABLE
直到它会得到300表。顺便说一句,每个表将只有和应该只有1个日期。因为该过程是截断插入,所以如果我看到一些表不匹配的日期一样,其他人,我知道该表有一些问题,我必须手动运行它。
1条答案
按热度按时间soat7uwm1#
听起来您需要扫描数据库的INFORMATION_SCHEMA以选择所有感兴趣的表,然后构建并执行动态SQL,该SQL查询每个选定的表并将结果进行UNION。
不清楚您想要的是顶部/最大插入日期还是插入日期的不同列表,所以我为这两种类型都提供了SQL模板。
下面将选择所有具有INSERT_DATE列的表,并构建和执行必要的动态SQL。
这将生成并执行以下动态SQL:
有关工作示例,请参见this db<>fiddle。
注意上面
QUOTENAME()
函数的用法,它是一个很好的实践,可以确保在将'strings'
和[identifiers]
注入动态SQL时正确转义潜在的特殊字符。STRING_AGG()
函数将生成的SQL片段连接在一起,并由第二个参数分隔(在本例中为UNION ALL
)。如果您使用的是不支持STRING_AGG()
的旧版本SQL Server,您将需要求助于使用FOR XML
hack,它在过去通常用于连接字符串。请参见this db<>fiddle以了解上面的FOR XML
版本。