【发布时间】:2013-04-29 02:43:27
【问题描述】:
我有一个存储过程,它使用LIKE 运算符在其他一些参数中搜索卡车位置
@location nchar(20),
@time time,
@date date
AS
select
DonationsTruck.VechileId, Phone, Location, [Date], [Time]
from
Vechile, DonationsTruck
where
Vechile.VechileId = DonationsTruck.VechileId
and (((Location like '%'+@location+'%') or (Location like '%'+@location) or (Location like @location+'%') ) or [Date]=@date or [Time] = @time)
我将其他参数设为空并仅按位置搜索,但即使我使用了位置的全名,它也始终不返回任何结果
【问题讨论】:
-
要正确处理 NULL 值,您需要明确检查它,例如
( [Date] = @Date or @Date is NULL )。对了,你只需要检查'%' + @location + '%',其他两个位置测试是多余的。 -
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已随 ANSI-92 SQL 标准(超过 20 年前)
-
尽可能多地避免使用 OR,因为它会大大降低您的性能。如果可能,请改用“In”子句。
标签: sql-server stored-procedures parameters sql-like