我在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,并在实际的WHERE子句中进行@SomeParameter IS NULL
测试。
还有其他方法吗?什么是最快的?
非常感谢。