如何在执行查询时比较2个字符串

问题描述 投票:1回答:1
declare @pid int
declare @mid int
declare @tableName varchar(10)
declare @query nvarchar(1000)
declare @subquery nvarchar(300)

set @pid = 1
set @mid = 2
set @query = 'Select * from '+@tableName+' where'

if(@pid is not null)
begin
set @query = @query+' pid ='+@pid+' and'
end

if(@mid is not null)
begin
set @query = @query+' mid ='+@mid+' and'
end

如果@pid和@mid不为null,则添加到查询中。如果@pid和@mid为null,我想从查询中删除“where”。对于'和'也是如此,如果两者都被选中。

set @subquery = select right('''+@query+''',5)
if(@subquery = 'where')
begin
print @query
-- execute sp_executesql @query
end

但在if条款中无法比较那些。我需要执行@subquery吗?如果是的话,如何获取该值?

sql
1个回答
2
投票

如果@pid和@mid不为null,则添加到查询中。

如果@pid和@mid为null,我想从查询中删除“where”。两者都被选中。

我想你正在寻找这样的东西:

WHERE 1 = 1
  AND (@mid IS NULL OR mid = @mid )
  AND (@pid IS NULL OR pid = @pid)

如果@pid@mid不是NULLs,之前的WHERE将是:

WHERE 1 = 1
  AND mid = @mid 
  AND pid = @pid

因此,它们会被添加到查询中。

如果@pid@midNULLs,那么WHERE条款将成为:

WHERE 1 = 1

因此它就像它不存在一样。

请注意,我使用WHERE 1 = 1以防两个@pid@mid都是NULLs,查询继续工作并且不会中断。

© www.soinside.com 2019 - 2024. All rights reserved.