我在 SQL Server 环境中工作,大量存储过程,其中许多过程使用 0 和 '' 而不是 Null 来表示没有传递有意义的参数值。
这些参数经常出现在 WHERE 子句中。通常的模式是这样的
WHERE ISNULL(SomeField,'') =
CASE @SomeParameter
WHEN '' THEN ISNULL(SomeField,'')
ELSE @SomeParameter
END
由于各种原因,对 proc 进行更改比更改调用它的代码要容易得多。那么,鉴于调用代码将为空参数传递空字符串,与空字符串进行比较的最快方法是什么?
我想到的一些方法:
@SomeParameter = ''
NULLIF(@SomeParameter,'') IS NULL
LEN(@SomeParameter) = 0
我还考虑过在 proc 的早期检查参数,如果它等于'',则将其设置为 NULL,然后@SomeParameter IS NULL
在实际的 WHERE 子句中进行测试。
还有哪些其他方法?什么是最快的?
非常感谢。