首页 > 解决方案 > 通过 INFORMATION_SCHEMA.COLUMNS 在数据库范围内搜索对象

问题描述

我想分别使用 TBL_A.TABLE_NAME 和 TBL_A.COLUMN_NAME 中的表名和列名添加另一个具有 COUNT() 子查询的列,但子查询不接受来自 TBL_A.TABLE_NAME 的值作为有效的表对象。

目前使用 MS SQL 服务器

SELECT TBL_A.TABLE_NAME
     , TBL_A.COLUMN_NAME
     , TBL_A.DATA_TYPE
     , (SELECT [TBL_A].[COLUMN_NAME] FROM [TBL_A].[TABLE_NAME] WHERE [TBL_A].[COLUMN_NAME] = 'Some Keyword')
FROM INFORMATION_SCHEMA.COLUMNS AS TBL_A;

我想检查我输入的关键字是否存在于 INFORMATION_SCHEMA 中指定的 tablename.columnname 中(例如 COUNT > 0 因此是 PRESENT)

标签: sqlsql-server

解决方案


试试这个方法。
注意:它在 SQL Server 中受支持(从 2008 开始)。

它使用SELECT - OVER 子句并搜索包含所需关键字的列。

SELECT [TBL_A].[TABLE_SCHEMA]  
    , TBL_A.TABLE_NAME  
    , TBL_A.COLUMN_NAME  
    , COUNT(*) OVER(PARTITION BY [TBL_A].[TABLE_SCHEMA], [TBL_A].[TABLE_NAME])  
        AS [Count in Current Table]  
    , COUNT(*) OVER(PARTITION BY [TBL_A].[COLUMN_NAME])  
        AS [Count in Current Database]  
FROM INFORMATION_SCHEMA.COLUMNS AS TBL_A  
WHERE [TBL_A].[COLUMN_NAME] LIKE '%Some Keyword%';     

推荐阅读