2010-08-16 110 views
0

這些是我傳遞一些方法變量,我需要寫一些SQL查詢像SQL查詢,以避免空值參數

string cmd = @"select * 
from students_tbl 
where 
    [email protected] and branch_id=in(+" branchId "+) 
and passout_year>[email protected] 
and current_backlog>[email protected] 
and [email protected] 
and eGap<[email protected] 
and first_year_percent>[email protected] 
and second_year_percent>[email protected] 
and third_year_percent>[email protected]"; 

等,但問題是很少有這些參數都是可選的手段對於那些變量 有值爲空,所以我並不想在查詢 所以這些參數,我應該如何消除這些空可變我沒有得到我應該怎麼寫查詢來解決這個問題

這些參數都是隨機的沒有任何修復,當他們將是空的,因爲嘿是可選 所以我應該如何使用只寫入空參數來編寫查詢

+0

那些paameter是隨機沒有修復,當他們將爲空 – NoviceToDotNet 2010-08-16 13:28:25

回答

1

您的比較之前只需添加一個is null檢查,這將短路如果輸入參數值是null,例如:

where (@currentBacklog is null or current_backlog >= @currentBacklog) 
+0

如果我把你的確如NULL那麼該參數不會被考慮在內?這就是我想要的請讓我知道 – NoviceToDotNet 2010-08-16 13:35:03

+0

@Novice:這是正確的 – RedFilter 2010-08-16 13:47:30

+0

恐怕你不明白我 它可能聽起來粗魯,但從上面的代碼我弄清楚htat它會尋找數據中的值基地這是當前積壓爲空或大於@currentBacklog 但是這是真的,通過上面的代碼,它不會採取current_backlog> = @ currentbakclog帳戶我的意思是它會完成忽略它,並過濾掉,然後我將運行查詢? – NoviceToDotNet 2010-08-16 13:59:43

1

您可以在條件中測試空值,並使用表中的值代替。例如:

... where course_id = isnull(@courseId, course_id) ... 
+0

每次我需要檢查非空參數我該怎麼做? 我不會讓你請把一些代碼 – NoviceToDotNet 2010-08-16 13:32:11

+0

我沒有使用存儲過程我只是想知道簡單的參數化查詢 – NoviceToDotNet 2010-08-16 13:32:56

+0

你的意思是說,每次我將太檢查空參數值,然後我將不得不連接它們 – NoviceToDotNet 2010-08-16 14:00:54

0

具有

cmd = "one long string with many clauses, some of which are optional" 

代替嘗試

cmd = "first clause, required" 
if second param is not null then 
    cmd = cmd & "second clause, optional" 
+0

你能寫一些代碼嗎? – NoviceToDotNet 2010-08-16 16:06:54