多条件查询存储过程问题
那为高手跟我看一下 我这个存储过程有什么错 我一执行就提示“消息 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