You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询SQL Server中包含指定列的非空表?

解决方案:SQL Server 筛选含指定列且非空的表

很容易把这两个需求结合起来,核心思路就是先筛选出包含目标列的表集合,再从中挑出有数据的表,或者反过来通过关联查询同时满足两个条件。我给你两种实用的写法,你可以根据需求选:

方法一:子查询过滤(简洁高效)

先通过INFORMATION_SCHEMA.COLUMNS拿到所有含%company%列的表名,再在非空表统计中筛选这些表:

SELECT 
    OBJECT_NAME(p.[object_id]) AS table_name,
    SUM(p.row_count) AS row_count,
    p.[object_id]
FROM 
    sys.dm_db_partition_stats p
INNER JOIN 
    sys.tables t ON p.[object_id] = t.[object_id]
WHERE 
    p.index_id IN (0, 1) -- 只统计堆表(0)和聚集索引(1)的总行数,避免重复统计
    AND OBJECT_NAME(p.[object_id]) IN (
        SELECT DISTINCT TABLE_NAME 
        FROM INFORMATION_SCHEMA.COLUMNS 
        WHERE COLUMN_NAME LIKE '%company%'
    )
GROUP BY 
    p.[object_id]
HAVING 
    SUM(p.row_count) > 0 -- 只保留有数据的表

方法二:JOIN关联(可查看列信息)

如果需要同时看到匹配的列名,可以用JOIN把两个结果集关联起来,这样能直观看到每个表中哪些列符合%company%的条件:

SELECT DISTINCT
    c.TABLE_SCHEMA + '.' + c.TABLE_NAME AS full_table_name, -- 带上schema避免同名表混淆
    c.COLUMN_NAME,
    s.row_count
FROM 
    INFORMATION_SCHEMA.COLUMNS c
INNER JOIN (
    -- 子查询获取所有非空表的行数统计
    SELECT 
        SCHEMA_NAME(t.schema_id) + '.' + OBJECT_NAME(p.[object_id]) AS full_table_name,
        SUM(p.row_count) AS row_count
    FROM 
        sys.dm_db_partition_stats p
    INNER JOIN 
        sys.tables t ON p.[object_id] = t.[object_id]
    WHERE 
        p.index_id IN (0, 1)
    GROUP BY 
        SCHEMA_NAME(t.schema_id), p.[object_id]
    HAVING 
        SUM(p.row_count) > 0
) s ON c.TABLE_SCHEMA + '.' + c.TABLE_NAME = s.full_table_name
WHERE 
    c.COLUMN_NAME LIKE '%company%'
ORDER BY 
    full_table_name

注意事项

  • sys.dm_db_partition_stats返回的行数是近似值,但对于绝大多数业务场景足够准确;如果需要精确行数,可以把子查询换成EXEC sp_MSforeachtable 'SELECT ''?'' AS table_name, COUNT(*) AS row_count FROM ? HAVING COUNT(*) > 0',但这个方法在大数据库中效率极低,谨慎使用。
  • 加上TABLE_SCHEMA是为了处理同一个数据库下不同schema的同名表,比如dbo.User和test.User,避免混淆。
  • DISTINCT是为了避免同一个表因为有多个匹配列而重复输出。

内容的提问来源于stack exchange,提问作者VBIL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:18:53