我有以下查询
SELECT id, namn, postA, postB postN FROM k.dbo.PF WHERE
namn LIKE @name + '%' AND
postA LIKE @address + '%' AND
postB LIKE @coAddress + '%' AND
postN LIKE @zip + '%' AND
k.dbo.status = 0
只要我在所有字段中都有正确的值,此查询就起作用。但是在这种情况下,数据库中的转交地址(postB列)有时可以为空。但是,当我为参数@coAddress提供空值时,查询不会返回任何内容。如果coAddress参数为null,如何重写此查询,以便完全跳过 AND 子句?
答案 0 :(得分:0)
使用OR
:
SELECT id, namn, postA, postB postN
FROM k.dbo.PF
WHERE (@name is null OR namn LIKE @name + '%') AND
(@address is null OR postA LIKE @address + '%') AND
(@coAddress is null OR postB LIKE @coAddress + '%') AND
(@zip is null OR postN LIKE @zip + '%') AND
k.dbo.status = 0;
答案 1 :(得分:0)
尝试:-
SELECT id, namn, postA, postB postN FROM k.dbo.PF WHERE
namn LIKE @name + '%' AND
postA LIKE @address + '%' AND
(@coAddress is NULL or postB LIKE @coAddress + '%') AND
postN LIKE @zip + '%' AND
k.dbo.status = 0
任何涉及NULL值的表达式都将始终返回false(“ IS NULL”除外)。