使用'ISNULL(x,0)= 0'代替(x为空或者x = 0)

时间:2011-03-24 08:35:59

标签: sql sql-server tsql

在sql中使用的最佳选项是什么?

ISNULL(x, 0)  = 0

(x is null OR x = 0)

由于

4 个答案:

答案 0 :(得分:4)

除非您遇到任何性能问题,否则我建议使用最容易阅读的内容。当只有两个值(即NULL和0)时,COALESCE和ISNULL是相同的

答案 1 :(得分:2)

要使用的“最佳”取决于您正在撰写的查询,这是来自BOL中的COALESCE页面

  

ISNULL和COALESCE虽然相当,   可以表现得不同。一种表达   涉及ISNULL非null   参数被认为是NOT   NULL,而表达式涉及   具有非空参数的COALESCE是   被认为是NULL。

因此,在不了解更多关于整个查询的情况下,它们可能是等效的但YMMV并且没有实际测试,您无法再猜测哪个更快。

此外,ISNULLCOALESCE的比较仅在您必须在两个值之间进行选择时才有用。只要有两个以上,您就需要使用COALESCE

答案 2 :(得分:0)

在这种情况下,我的模式是使用合并:

SELECT @SomeVariable = COALESCE(@SomeInputVariable, 0)

OR

SELECT * FROM Table WHERE Column > COALESCE(@SomeInputVariable, 0)

答案 3 :(得分:0)

它们应该是相同的,但实际上我对一些非常大的select语句进行了一些测试,并且isnull(x,0)= 0类似的条件被证明更快。

这个逻辑结论是SQL团队以某种方式对其进行了优化。

不是这样,coalesce应该用于isnull,因为coalesce是标准的sql方法,而isnull是MS特定的。这意味着将来(取决于MS的想法)isnull可能会被弃用。