1

我有類似以下WHERE條款東西在我的SQL語句的更好的辦法:寫這個SQL WHERE子句

AND (ipdp.UserID!=dbo.fn_userid(ipdp.ItemID) OR dbo.fn_userid(ipdp.ItemID) IS NULL) 

不過,我不喜歡怎麼dbo.fn_userid功能正在跑了兩次。我怎樣才能改進這一行代碼,以便它只需要運行一次?

ipdp.UserID始終是一個非空的整數值

dbo.fn_userid可以返回NULL或一個整數值

乾杯。

+0

你確定它的運行兩次?函數是否有副作用,或者它是否可重複地映射一個值到另一個值? – Rup 2010-11-18 10:00:11

+0

它在我的WHERE子句中有兩次,所以據我所知,它運行兩次?兩次傳遞相同的參數值,所以我想減少這種用法。 – Curt 2010-11-18 10:02:57

+0

在上面的代碼中,只有當()內部的測試爲false時,函數纔會運行兩次。你能更多地展示一下where子句嗎? – 2010-11-18 20:38:08

回答

4

嘗試:

AND ipdp.UserID != ISNULL(dbo.fn_userid(ipdp.ItemID), -1) 
+0

感謝邁克爾,我曾經想過做這樣的事情,但不知道它會有多高效。再次感謝 – Curt 2010-11-18 10:03:37