Sql 有条件地将where添加到语句中
我正在写一个存储过程 此过程将获得4个参数,这些参数将在Sql 有条件地将where添加到语句中,sql,sql-server,Sql,Sql Server,我正在写一个存储过程 此过程将获得4个参数,这些参数将在where子句中使用。问题是这些参数可能为空 我试着写这样的东西: select * from Books If(@param1 <> "") add where title =@param1 to the clause 从书本中选择* 如果(@param1“”) 添加其中title=@param1 对该条款的补充 但是我不知道怎么做。有可能吗?你可以这样试试 Select * from Books where (Titl
where
子句中使用。问题是这些参数可能为空
我试着写这样的东西:
select * from Books
If(@param1 <> "")
add where title =@param1
to the clause
从书本中选择*
如果(@param1“”)
添加其中title=@param1
对该条款的补充
但是我不知道怎么做。有可能吗?你可以这样试试
Select * from Books where (Title=@title or @title='')
你可以这样试试
Select * from Books where (Title=@title or @title='')
这种类型的查询称为。有几种方法可以做到这一点,其中之一是使用
和以及或条件的组合:
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
DECLARE@sql NVARCHAR(MAX)=”
选择@sql='SELECT*从1=1的书籍中选择'
如果@param1“”开始
选择@sql=@sql+'和title=@param1'
结束
EXEC sp_executesql
@sql,
N'@param1 VARCHAR(10)',
@param1=@param1
补充阅读:
- Erland Sommarskog关于
这种类型的查询称为。有几种方法可以做到这一点,其中之一是使用和以及或条件的组合:
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
DECLARE@sql NVARCHAR(MAX)=”
选择@sql='SELECT*从1=1的书籍中选择'
如果@param1“”开始
选择@sql=@sql+'和title=@param1'
结束
EXEC sp_executesql
@sql,
N'@param1 VARCHAR(10)',
@param1=@param1
补充阅读:
- Erland Sommarskog关于
如果希望在参数中处理null,并希望在标题字段中包含null的记录,则可以使用
select *
from Books
where ISNULL(title,#)=ISNULL(@param,#)
如果希望在参数中处理null,并希望在标题字段中包含null的记录,则可以使用
select *
from Books
where ISNULL(title,#)=ISNULL(@param,#)
其中(Field=@Param或@Param为NULL)和(Otherfield=@Otherparam或@Otherparam为NULL)
等等。其中(Field=@Param或@Param为NULL)和(Otherfield=@Otherparam或@Otherparam为NULL)
等等……我不喜欢这种方法。这使得查询不可用-sargable@MotoGP这取决于需求。有多种方法做同样的事情,你也可以优化这一个。我不喜欢这种方法。这使得查询不可用-sargable@MotoGP这取决于需求。做同一件事有多种方法,你也可以优化这一种。