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