2012-09-03 103 views
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 '[email protected]+' where' 

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

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

如果@pid和@mid不空,都会进入这个query.If @pid和@mid空如何comapre 2串,我想从query.Same删除“其中”为'和',如果两者都被选中。在执行查询

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

但无法比拟的,在如果clause.Does我需要EXCUTE @ subquery.If是,如何把该值。

+0

我忘了告诉TableName也是动态的,为什么我选择执行sp_executesql @query。 – pinky

+0

@pinky,你也忘了回复[mocha的评论](http://stackoverflow.com/questions/12245489/how-to-comapre-2-string-while-executing-the-query#comment16414042_12245489)? –

回答

2

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

如果@pid和@mid null,我想从查询中删除'where'。 都被选中。

我认为你正在寻找的东西是这样的:

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

如果@pid@midNULL秒,以前WHERE是:

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

因此它们得到补充进入查询。

如果@pid@midNULL s,则WHERE条款将成为:

WHERE 1 = 1 

因此它会像它不存在。

注意,我使用的情况下,WHERE 1 = 1两个@pid@mid都是NULL秒,查询是继续工作,不打破。

+0

感谢Mahmoud,对于我的帮助。但我的表名也是动态的。这就是为什么我选择sp_executesql.I创建了动态生成的查询。 – pinky

+0

那有什么问题呢?它应该与创建的动态生成的查询一起工作。 –

+0

如果我的表名是动态的,我该如何从caluse写入,这就是我选择执行sp_executesql的原因。 – pinky