現在我正在開發一個存儲過程,它需要3個輸入參數。但挑戰在於客戶不必輸入任何這些參數;他們可能會將這3個作爲空值。我怎樣才能將它寫入WHERE子句?創建一個T-sQL where子句來接受NULL值
僞代碼是一樣的東西:
WHERE (@p1 = a.p1 or @p1 = '')
and (@p2 = a.p2 or @p2 = '')
and (@p2 = a.p2 or @p2 = '')
當他們選擇3個參數的上述邏輯的作品,但否則返回0記錄。
現在我正在開發一個存儲過程,它需要3個輸入參數。但挑戰在於客戶不必輸入任何這些參數;他們可能會將這3個作爲空值。我怎樣才能將它寫入WHERE子句?創建一個T-sQL where子句來接受NULL值
僞代碼是一樣的東西:
WHERE (@p1 = a.p1 or @p1 = '')
and (@p2 = a.p2 or @p2 = '')
and (@p2 = a.p2 or @p2 = '')
當他們選擇3個參數的上述邏輯的作品,但否則返回0記錄。
它看起來像你檢查空白/空字符串(意思是'跳過這個')。如果變量也可爲空,則可以使用ISNULL(x,'')
強制將空參數轉換爲空字符串。
WHERE (@p1 = a.p1 or ISNULL(@p1,'') = '')
AND (@p2 = a.p2 or ISNULL(@p2,'') = '')
AND (@p2 = a.p2 or ISNULL(@p2,'') = '')
試試這個:
WHERE (@p1 = a.p1 or @p1 = '' OR @p1 IS NULL)
AND (@p2 = a.p2 or @p2 = '' OR @p2 IS NULL)
AND (@p2 = a.p2 or @p2 = '' OR @p3 IS NULL)
你應該查詢更改爲類似這樣:
WHERE (a.p1 = IsNull(NullIf(@p1, ''), a.p1))
and (a.p2 = IsNull(NullIf(@p2, ''), a.p2))
and (a.p3 = IsNull(NullIf(@p3, ''), a.p3))
感謝所有的U!儘管我給予坎貝爾先生答案,因爲他是第一個迴應。非常感謝你! – salvationishere 2011-04-18 16:38:57