首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

多条件查询存储过程有关问题

2012-01-06 
多条件查询存储过程问题那为高手跟我看一下我这个存储过程有什么错我一执行就提示“消息102,级别15,状态1,

多条件查询存储过程问题
那为高手跟我看一下   我这个存储过程有什么错   我一执行就提示“消息   102,级别   15,状态   1,第   1   行  
'= '   附近有语法错误。  
”   谢谢  
create   procedure   [dbo].[SP_Tgongxu_SelByMore]  
@gx_name   nvarchar(50),  
@gx_alias   nvarchar(50),  
@gx_account_mode   nvarchar(50),  
@gx_istime   int,  
@gx_iskeygongxu   nvarchar(10),  
@gx_isdos   nvarchar(10),  
@gx_isquality   int,  
@gx_ischoujian   int,  
@gx_account_soft   nvarchar(50)  
as  
declare   @sql1   nvarchar(500)  
declare   @sql2   nvarchar(300)  
declare   @sql3   nvarchar(300)  
declare   @sql4   nvarchar(300)  
declare   @sql5   nvarchar(300)  
declare   @sql6   nvarchar(300)  
declare   @sql7   nvarchar(300)  
declare   @sql8   nvarchar(300)  
declare   @sql9   nvarchar(300)  

set   @sql1= 'select   *   from   Tgongxu '  
set   @sql2= ' '  
set   @sql3= ' '  
set   @sql4= ' '  
set   @sql5= ' '  
set   @sql6= ' '  
set   @sql7= ' '  
set   @sql8= ' '  
set   @sql9= ' '  

if   @gx_name <> ' '  
set   @sql1= 'gx_name= ' ' '+@gx_name+ ' ' ' '  

if   @gx_alias <> ' '  
begin  
set   @sql2= 'gx_alias= ' ' '+@gx_alias+ ' ' ' '  
if   @sql1 <> ' '  
set   @sql2= 'and '+@sql2  
end  

if   @gx_account_mode <> ' '  
begin  
set   @sql3= 'gx_account_mode= ' ' '+@gx_account_mode+ ' ' ' '  
if   @sql1+@sql2 <> ' '  
set   @sql3= 'and '+@sql3  
end  

if   @gx_istime <> ' '  
begin  
set   @sql4= 'gx_istime= ' ' '+@gx_istime+ ' ' ' '  
if   @sql1+@sql2+@sql3 <> ' '  
set   @sql4= 'and '+@sql4  
end  

if   @gx_iskeygongxu   <> ' '  
begin  
set   @sql5= 'gx_iskeygongxu= ' ' '+@gx_iskeygongxu+ ' ' ' '  
if   @sql1+@sql2+@sql3+@sql4 <> ' '  
set   @sql5= 'and '+@sql5  
end  

if   @gx_isdos <> ' '  
begin  
set   @sql6= 'gx_isdos= ' ' '+@gx_isdos+ ' ' ' '  
if   @sql1+@sql2+@sql3+@sql4+@sql5 <> ' '  
set   @sql6= 'and '+@sql6  
end  

if   @gx_isquality <> ' '  
begin  
set   @sql7= 'gx_isquality= ' ' '+@gx_isquality+ ' ' ' '  
if   @sql1+@sql2+@sql3+@sql4+@sql5+@sql6 <> ' '  
set   @sql7= 'and '+@sql7  
end  

if   @gx_ischoujian <> ' '  
begin  
set   @sql8= 'gx_ischoujian= ' ' '+@gx_ischoujian+ ' ' ' '  
if   @sql1+@sql2+@sql3+@sql4+@sql5+@sql6+@sql7 <> ' '  


set   @sql8= 'and '+@sql8  
end  

if   @gx_account_soft <> ' '  
begin  
set   @sql9= 'gx_account_soft= ' ' '+@gx_account_soft+ ' ' ' '  
if   @sql1+@sql2+@sql3+@sql4+@sql5+@sql6+@sql7+@sql8 <> ' '  
set   @sql9= 'and '+@sql9  
end  

if   @sql1+@sql2+@sql3+@sql4+@sql5+@sql6+@sql7+@sql8+@sql9 <> ' '  
set   @sql1=@sql1+ 'where '+@sql1+@sql2+@sql3+@sql4+@sql5+@sql6+@sql7+@sql8+@sql9  

execute   (@sql1)


[解决办法]
/*
搞得那么复杂。
原来的错太多了,改不来,重写一个,应该问题。
*/
create procedure [dbo].[SP_Tgongxu_SelByMore]
@gx_name nvarchar(50)=null,
@gx_alias nvarchar(50)=null,
@gx_account_mode nvarchar(50)=null,
@gx_istime int=null,
@gx_iskeygongxu nvarchar(10)=null,
@gx_isdos nvarchar(10)=null,
@gx_isquality int=null,
@gx_ischoujian int=null,
@gx_account_soft nvarchar(50)=null
as

declare @sql nvarchar(4000)
set @sql=coalesce(@sql, ' ')+
coalesce( ' gx_name= ' ' '+@gx_name+ ' ' ' and ', ' ')+
coalesce( ' gx_alias= ' ' '+@gx_alias+ ' ' ' and ', ' ')+
coalesce( ' gx_account_mode= ' ' '+@gx_account_mode+ ' ' ' and ', ' ')+
coalesce( ' gx_istime= '+cast(@gx_istime as varchar)+ ' and ', ' ')+
coalesce( ' gx_iskeygongxu= ' ' '+@gx_iskeygongxu+ ' ' ' and ', ' ')+
coalesce( ' gx_isdos= ' ' '+@gx_isdos+ ' ' ' and ', ' ')+
coalesce( ' gx_isquality= '+cast(@gx_isquality as varchar)+ ' and ', ' ')+
coalesce( ' gx_ischoujian= '+cast(@gx_ischoujian as varchar)+ ' and ', ' ')+
coalesce( ' gx_account_soft= ' ' '+@gx_account_soft+ ' ' ' and ', ' ')
if len(@sql)> 0 set @sql= ' where '+left(@sql,len(@sql)-4)
set @sql= 'select * from Tgongxu '+@sql
exec(@sql)
go

热点排行