我正在写一个商店程序。
此过程获得4个参数,这些参数将在where
子句中使用。问题是这些参数可能是空的。
我正在尝试写这样的东西:
select * from Books
If(@param1 <> "")
add where title =@param1
to the clause
但我不知道如何制作它。它甚至可能吗?
答案 0 :(得分:3)
此类查询称为catch-all-query。有几种方法可以做到这一点,其中一种方法是使用AND
和OR
条件的组合:
SELECT *
FROM Books
WHERE
(@param1 = '' OR title = @param1)
另一种方法是使用动态sql:
DECLARE @sql NVARCHAR(MAX) = ''
SELECT @sql = 'SELECT * FROM Books WHERE 1 = 1'
IF @param1 <> '' BEGIN
SELECT @sql = @sql + ' AND title = @param1'
END
EXEC sp_executesql
@sql,
N'@param1 VARCHAR(10)',
@param1 = @param1
补充阅读:
答案 1 :(得分:1)
您可以尝试这样
Select * from Books where (Title=@title or @title='')
答案 2 :(得分:1)
select *
from Books
where (title = @param or @param = '')
答案 3 :(得分:1)
如果您希望在参数中处理null并希望包含标题字段中存在null的记录,则可以使用
select *
from Books
where ISNULL(title,#)=ISNULL(@param,#)