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吗?如果是,如何获取该值?
答案 0 :(得分: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
不是NULL
s,那么之前的WHERE
就是:
WHERE 1 = 1
AND mid = @mid
AND pid = @pid
因此,它们会被添加到查询中。
如果@pid
和@mid
为NULL
s,则WHERE
子句将成为:
WHERE 1 = 1
因此它就像它不存在一样。
注意,我使用了WHERE 1 = 1
,以防两个@pid
和@mid
都是NULL
,查询仍在继续并且不会破裂。