SQL-从公共列为null的所有表中获取行

SQL-从公共列为null的所有表中获取行,sql,sql-server,information-schema,Sql,Sql Server,Information Schema,我需要找到创建/更新日期为空的任何表中的所有行 有500多个表,所以像下面这样做是不可行的 SELECT * FROM (SELECT 'tableA' AS `table`, IF(COUNT(`column_a`), NULL, 'column_a') AS `column` FROM tableA UNION ALL SELECT 'tableB' AS `table`,

我需要找到创建/更新日期为空的任何表中的所有行

有500多个表,所以像下面这样做是不可行的

SELECT * 
FROM 
    (SELECT 
         'tableA' AS `table`,
         IF(COUNT(`column_a`), NULL, 'column_a') AS `column`
     FROM tableA

     UNION ALL

     SELECT 
         'tableB' AS `table`,
         IF(COUNT(`column_b`), NULL, 'column_b') AS `column`
     FROM tableB

     UNION ALL
     -- etc.
     ) t 
WHERE 
    `column` IS NOT NULL

我想我可以以某种方式使用
信息\u模式
,但我在这方面遇到了困难。

我通常通过使用sys.tables将一个表列表填充到一个临时表中,然后围绕该列表编写动态SQL

select quotename( schemas.name ) + '.' + quotename(tables.name) as tbl
into #work 
from sys.tables
join sys.schemas on tables.schema_id = schemas.schema_id

select 

'select ''' + tbl + ''' as [table] where exists ( select * from ' + tbl + ' where column_a is null )' as sqlcmd,

'select ''' + tbl + ''' as [table], * from ' + tbl + ' where createdate is null ' as sqlcmd

from #work

drop table #work

一旦有了列表,您就可以在SSMS中手动执行它,或者使用游标对其进行迭代以执行每条语句。不过,引号会让你头疼。动态SQL不适合胆小的人。

所以你有一堆表,它们都有Create\u Date和Update作为列?然后,您需要每个表中的每一行的所有信息,其中任何一个日期都为空?这是标记为sql server的,但代码看起来很像mysql。
information\u SCHEMA
(或
sys.tables
sys.columns
等目录视图)提供了有关(静态)的信息数据库的结构-表名、列名等-但与内容无关(值-
NULL
或否)。是的,您可以使用
信息\u模式
作为实现所需内容的步骤。编写一个存储过程,在其中对每个表执行一个查询或生成一个查询。SQL Server有一个spmsforeachtable函数,非常适合于此。