2015-10-30 85 views
-3

我在SQL SERVER有一個表下方數據生成具有可變列數動態查詢的WHERE條件

Key SCH_NME TBL_NME COLM_NME 
--- ------ -------  ------------- 
PRM DBO  Test  Col1,col2,col3 
FRN CHK  Tab   Col4,Col5 

請給我一個動態查詢,以獲得一個輸出以下格式

select col1,col2,col3 from DBO.[Test] where (col1 is null OR col2 is null OR col3 is null;) 

OR

select col4,col5 from CHK.[Tab] where (col4 is null OR col5 is null) 

WHERE條件將基於該COLM_NME(vaiable)填充

+0

你不能用逗號分開謂詞。您需要在謂詞之間有一個邏輯運算符。這需要有OR或AND。正如所發佈的,這並沒有多大意義,並且顯示出努力尋找解決方案的努力。 –

+0

嗨,肖恩,我已經編輯了這個問題 – RajeevBakshi

+1

太好了,你嘗試過什麼嗎?這是處理任何數據庫中數據的可怕方法。它需要動態的sql才能工作。 –

回答

0

這是非常糟糕的設計尖叫,但實際的代碼非常簡單。你需要動態的sql才能工作。我還必須根據您提供的樣本數據生成表格。

if OBJECT_ID('tempdb..#Something') is not null 
    drop table #Something 

create table #Something 
(
    MyKey char(3) 
    , SCH_NME char(3) 
    , TBL_NME varchar(10) 
    , COLM_NME varchar(100) 
) 

insert #Something 
select 'PRM', 'DBO', 'Test', 'Col1,col2,col3' union all 
select 'FRN', 'CHK', 'Tab', 'Col4,Col5' 


--Now for the actual code. 

Declare @SQL nvarchar(max) 
    , @TblName sysname = 'Test' 

select @SQL = 'select ' + COLM_NME + ' from [' + SCH_NME + '].[' + TBL_NME + '] where ' + REPLACE(COLM_NME, ',', ' IS NULL OR ') + ' IS NULL;' 
from #Something 
where TBL_NME = @TblName 

select @SQL 
--uncomment below when you are ready to run this 
--exec sp_executesql @SQL