多条件查询存储过程问题
那为高手跟我看一下 我这个存储过程有什么错 我一执行就提示“消息 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 proc StaffSearch
@Name varchar(200),
@Mobile varchar(100),
@Email varchar(100),
@Gender varchar(100),
@PositionID int,
@SearchBound varchar(50)
/*--------------------------------------
功能:查询人员
参数:
@Name人员姓名
@Mobile手机号码
@Emailemail
@Gender性别
@PositionID职位id
@SearchBound查询范围
---------------------------------------*/
AS
DECLARE @SQL VARCHAR(500)
DECLARE @HAVECONDITION BIT
IF @PositionID=0
SET @SQL = 'SELECT UDS_Position.Position_Name,uds_staff.*,Case Sex When 1 Then ' '男 ' ' Else ' '女 ' ' End AS SexName FROM UDS_STAFF Left OUTER JOIN UDS_Staff_In_Position ON UDS_STAFF.STAFF_ID=UDS_Staff_In_Position.Staff_ID INNER JOIN UDS_Position ON UDS_Staff_In_Position.Position_ID=UDS_Position.Position_ID '
ELSE
SET @SQL = 'SELECT UDS_Position.Position_Name,uds_staff.*,Case Sex When 1 Then ' '男 ' ' Else ' '女 ' ' End AS SexName FROM UDS_STAFF INNER JOIN UDS_Staff_In_Position ON UDS_STAFF.STAFF_ID=UDS_Staff_In_Position.Staff_ID INNER JOIN UDS_Position ON UDS_Staff_In_Position.Position_ID=UDS_Position.Position_ID '
SET @HAVECONDITION = 0
IF (@Name <> ' ')
BEGIN
SET @SQL = @SQL + ' WHERE (Staff_Name LIKE ' '% '+@Name+ '% ' ' OR RealName LIKE ' '% '+@Name+ '% ' ') '
SET @HAVECONDITION = 1
END
IF (@Mobile <> ' ')
BEGIN
IF(@HAVECONDITION=0)
BEGIN
SET @SQL = @SQL + ' WHERE (Mobile LIKE ' '% '+@Mobile+ '% ' ') '
SET @HAVECONDITION = 1
END
ELSE
SET @SQL = @SQL + ' AND (Mobile LIKE ' '% '+@Mobile+ '% ' ') '
END
IF (@Email <> ' ')
BEGIN
IF(@HAVECONDITION=0)
BEGIN
SET @SQL = @SQL + ' WHERE (Email LIKE ' '% '+@Email+ '% ' ') '
SET @HAVECONDITION = 1
END
ELSE
SET @SQL = @SQL + ' AND (Email LIKE ' '% '+@Email+ '% ' ') '
END
IF (@Gender <> ' ')
BEGIN
IF(@HAVECONDITION=0)
BEGIN
IF @Gender= 'male '
BEGIN
SET @SQL = @SQL + ' WHERE (Sex=1) '
SET @HAVECONDITION = 1
END
ELSE
BEGIN
SET @SQL = @SQL + ' WHERE (Sex=0) '
SET @HAVECONDITION = 1
END
END
ELSE
IF @Gender= 'male '
BEGIN
SET @SQL = @SQL + ' AND (Sex=1) '
END
ELSE
BEGIN
SET @SQL = @SQL + ' AND (Sex=0) '
END
END
IF (@PositionID <> 0)
BEGIN
IF(@HAVECONDITION=0)
BEGIN
SET @SQL = @SQL + ' WHERE (UDS_Position.Position_ID= '+Convert(varchar(5),@PositionID)+ ') '
SET @HAVECONDITION = 1
END
ELSE
SET @SQL = @SQL + ' AND (UDS_Position.Position_ID= '+Convert(varchar(5),@PositionID)+ ') '
END
IF (@SearchBound= 'on ')
BEGIN
IF(@HAVECONDITION=0)
BEGIN
SET @SQL = @SQL + ' WHERE (UDS_Staff.Dimission=0) '
SET @HAVECONDITION = 1
END
ELSE
SET @SQL = @SQL + ' AND (UDS_Staff.Dimission=0) '
END
IF (@SearchBound= 'off ')
BEGIN
IF(@HAVECONDITION=0)
BEGIN
SET @SQL = @SQL + ' WHERE (UDS_Staff.Dimission=1) '
SET @HAVECONDITION = 1
END
ELSE
SET @SQL = @SQL + ' AND (UDS_Staff.Dimission=1) '
END
PRINT @SQL
EXECUTE (@SQL)
GO