有几种方法可以检查参数是否为空或具有值。 检查的最好方法之一如下:
DECLARE @PhoneNo VARCHAR(12) = '12345'
SELECT *
FROM PhoneNumber
WHERE
PhoneNo = @PhoneNo OR @PhoneNo IS NULL
问题是,当我使用OR运算符时需要5秒或更长时间。但是,如果我只是写
PhoneNo = @PhoneNo
只需不到一秒钟。
最终解决方案可以使用动态查询。我不喜欢那样做。
答案 0 :(得分:0)
如果传入的变量为NULL,您希望实现什么?很明显,返回所有行可能需要比返回一个拟合行更长的时间。
如果您不想在这个地方接受NULL,请改变您的逻辑:
DECLARE @PhoneNo VARCHAR(12)
SELECT *
FROM PhoneNumber
WHERE
@PhoneNo IS NOT NULL AND PhoneNo = @PhoneNo
答案 1 :(得分:-1)
选项1
您可以使用coalesce()函数。
即合并(PhoneNo,@ PhoneNo)= @PhoneNo。
如果变量为null,这将用数据替换数据库中的PhoneNo。
选项2
使用联合查询,因为这比使用“OR”子句更快。
示例:
SELECT * FROM PhoneNumber WHERE PhoneNo = @PhoneNo
UNION ALL
SELECT * FROM PhoneNumber WHERE @PhoneNo IS NULL