不显示空的返回集

时间:2014-07-17 19:31:54

标签: sql sql-server-2008 tsql

我有以下sql代码:

select 'select * from ' + table_name + ' where ' + column_name + ' = 123'
FROM INFORMATION_SCHEMA.COLUMNS  
WHERE COLUMN_NAME like '%columnOfInterest%'

对于给定的数据库,这将查看具有名为columnOfInterest的列的所有表,其中包含值123。 这是出于调试目的,因此输出不必非常漂亮,当然也不是。 大多数表没有列,其中更少的列的值为123,因此大多数返回集都是空的。
我正在寻找方法来消除输出。例如,我根本不需要查看空集。有关如何做到这一点或清理它的任何想法?
附件是SQL Server Manage中输出的屏幕截图。我不得不删除一些可能敏感的列名。蓝色列是columnOfInterest,黑色是其他所有列。您在此处看到的每一行都是1表中的空输出。

enter image description here

2 个答案:

答案 0 :(得分:1)

这应该返回带有列名的表名。这会吗?

DECLARE @Tsql NVARCHAR(MAX)
SET @Tsql = ''
select @Tsql = @Tsql +  'select TOP(1) ''' + c.table_schema + '.' + c.table_name + ''' AS TableName, ''' + c.COLUMN_NAME + ''' AS ColumnName  from ' + c.table_schema + '.' + c.table_name + ' where EXISTS 
    (SELECT 1 FROM ' + c.table_schema + '.' + c.table_name + ' WHERE ' + c.column_name + ' = 123) UNION' + CHAR(13) + CHAR(10)
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.COLUMN_NAME like '%SomeColumnName%'
--You may want to filter on data type here.  Did I leave anything out?
AND c.data_type IN ('BIGINT', 'INT', 'TINYINT', 'SMALLINT', 'NUMBER', 'DECIMAL', 'MONEY')

SELECT @Tsql = LEFT(@Tsql, LEN(@Tsql) - 7)

PRINT @Tsql

--EXEC sp_executesql @Tsql

答案 1 :(得分:1)

将动态查询包装在IF块中,该块测试查询是否会返回任何内容。

select 'if exists (' + QUERY + ')' + char(10) + '    ' + QUERY
from (
    select QUERY = 'select * from ' + TABLE_NAME 
        + ' where ' + COLUMN_NAME + ' = 123'
    from INFORMATION_SCHEMA.COLUMNS  
    where COLUMN_NAME like '%columnOfInterest%'
)  q