通过INFORMATION_SCHEMA.COLUMNS在数据库范围内搜索对象

时间:2019-05-07 07:40:56

标签: sql sql-server

我想添加另一个具有COUNT()子查询的列,分别使用TBL_A.TABLE_NAME和TBL_A.COLUMN_NAME中的表名和列名,但是该子查询不接受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的指定表名。列名中(例如COUNT> 0表示当前)

1 个答案:

答案 0 :(得分:0)

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

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

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%';