2014-07-17 47 views
0

我有以下的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

+0

當你說「*設置*」(複數)。他們來自哪裏?您的查詢是否是更大腳本的一部分? –

+0

可以這麼說,整個代碼體現在這裏。這些集合來自它是'select'中的'select'的事實。 –

+0

您發佈的代碼會生成一堆select語句。你是否複製這些陳述,然後運行它們,並且這是你不想看到它是否爲空的設置? – SQLChao

回答

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 
+0

QUERY這裏是指我的原始文章中的代碼? –

+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 
+0

Hmph我正在嘗試這個,第一個選擇,也就是前8行沒有返回Fwiw,t他感興趣的列是int –

+0

打印的@Tsql命令應該是一個或多個select語句。每條語句都是兩個「行」,並附有「UNION」。突出顯示其中一個選擇語句(不帶'UNION')並運行它。怎麼了?如果沒有返回,那麼它是一個「空結果集」。 – DMason

+0

@mickey,這是爲你工作嗎? – DMason