对于列ColA为VARCHAR(x)的表,我该如何重写这个条件
ColA LIKE @param + '%'
考虑到:
我在想:
ISNULL(ColA, '') LIKE (CASE WHEN @param IS NULL THEN '%' ELSE @param + '%' END)
但这不会使用ColA上定义的索引。
答案 0 :(得分:1)
分为两个条件:
...
WHERE ((@param is null AND ColA is null)
OR (@param IS NOT NULL AND ColA LIKE @param + '%'))
但是OR经常会杀死索引使用,所以如果这不起作用,请尝试进一步分为两个查询:
...
WHERE @param is null
AND ColA is null
UNION
...
WHERE @param IS NOT NULL
AND ColA LIKE @param + '%'
但是
答案 1 :(得分:0)
只需使用:
WHERE ((@param is NULL) and (ColA is NULL)) OR (ColA LIKE '%' + @param + '%')
但是如果使用LIKE '%' + @param + '%'
索引则不能使用(如果它不是FULL-TEXT索引):