看起來你想念你@輸入1和其中的情況下應該開始之間的事情。
Select *
from table as tbla
where tbla.Id='''[email protected]+ ''' **SOMETHING_MISSING_HERE**
(Case when @Input2 is not null then tbla.supid='''[email protected]+ ''' else '''' end)
當你使用的情況下,你需要它是什麼的情況下,當時的一部分的情況下的「迴歸」(這麼說)元素 - 要比較的東西。
因此,例如:
'Select *
from table as tbla
where tbla.Id='''[email protected]+ '''
AND tbla.supid=
(Case when ''' + @Input2 + ''' is not null then '''[email protected]+ ''' else '''' end)'
這將檢查tbla.Id = @Input1
,如果@輸入2不爲空是supid = @Input2
或者@輸入2是空的是supid = ''
通知相比,你的榜樣的supid =
安置。
這是你需要的那條線嗎? 而如果是 - 那麼你可以通過使用ISNULL簡化聲明:
'Select * from table as tbla
where tbla.Id='''[email protected]+ ''' AND tbla.supid= ISNULL(''' + @Input2 + ''' , '')'
然而,只是爲了使問題更復雜一點;那麼你會遇到一個NULL問題,你試圖爲你的動態SQL添加NULL到一個字符串,並且添加NULL將導致NULL。 所以,在你的榜樣,以檢查NULL的最佳地點將是檢查查詢之前的@輸入2變量: 因此,當您有:
DECLARE @Input2 VARCHAR(100)
則變量被設置後,你應該檢查在動態SQL語句中使用它之前NULL:
SET @Input2 = ISNULL(@Input2, '')
而且然後使用變量的動態SQL語句。
我希望它是類似如果參數不爲null然後包括在where子句否則不需要包括。請參閱我編輯的查詢。 – DonMax
然後執行類似'AND tbla.supId = ISNULL(@ Input2,tlba.supId)' 那麼你不需要動態的sql字符串來執行。如果它爲空,則supId將與supId匹配,否則,它將與@ Input2 –
比較它不適用於我''從表中選擇*作爲tbla 其中tbla.Id='''++Input1+' ''AND tbla.supid = ISNULL('''+ @ Input2 +''',tbla.supid)''。 – DonMax