有条件地添加声明的位置

时间:2016-03-03 06:32:37

标签: sql sql-server

我正在写一个商店程序。

此过程获得4个参数,这些参数将在where子句中使用。问题是这些参数可能是空的。

我正在尝试写这样的东西:

select * from Books
If(@param1 <> "")
add where title =@param1 
to the clause

但我不知道如何制作它。它甚至可能吗?

4 个答案:

答案 0 :(得分:3)

此类查询称为catch-all-query。有几种方法可以做到这一点,其中一种方法是使用ANDOR条件的组合:

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,#)