我有一个SQL Server存储过程,有人在where子句中使用isnull
结合between关键字在哪里写了他们。他们正在使用以下内容:
isnull(JobNumber, '') between @BeginJob and @EndJob
如果JobNumber
列为空,此比较将返回什么?谢谢。
答案 0 :(得分:0)
它将被转换为空字符串,因为ISNULL将param1(提供的列)的NULL值转换为param2值。因此,在您的情况下,您使用x和y之间的列值,但是当为null时,它将使用“”
https://docs.microsoft.com/en-us/sql/t-sql/functions/isnull-transact-sql?view=sql-server-2017
答案 1 :(得分:0)
如果存在这样的索引,此表达式将阻止在JobNumber上使用索引。删除isull,结果仍然相同,但是速度更快。
答案 2 :(得分:0)
在任何情况下变量@BeginJob都可以用''传递。看起来JobNumber列是可以为空的,这就是为什么在空格的情况下全部返回的原因。
因为两个空值之间没有比较值总是为空。