下面是我的SQL语句,打印出来都是好的,但是运行却总是报错。
ALTER           Procedure proc_SearchCompanyAll1
@Name varchar(256),
@Age varchar(256),
@Age1 varchar(256),
@Area varchar(256),
@Address varchar(256),
@Degree varchar(256),
@Drive varchar(256),
@Experience varchar(256),
@JobArea varchar(256),
@JobArea1 varchar(256),
@Menoy varchar(256),
@Public varchar(256),
@Sex varchar(256),
@WantAddress varchar(256),
@WantAddress1 varchar(256),
@UpdateDate varchar(256),
@SelDegree varchar(256)
As 
declare @sql nvarchar(500)begin
set @sql='select * from Person_stuff where 1=1'
+CASE WHEN @Name !='' THEN ' and name = '''+@Name+''''else '' END
+CASE WHEN @Sex !='' THEN ' and Sex='''+@Sex+''''else ''  END
+CASE WHEN @WantAddress !='-1'THEN ' and expect_post = '''+@WantAddress+''' or expect_post2 = '''+@WantAddress+''' or expect_post3 = '''+@WantAddress+''''else '' END
+CASE WHEN @JobArea !='' THEN ' and expect_city='''+@JobArea+''' or expect_city2='''+@JobArea+''' or expect_city3='''+@JobArea+''''else '' END
+CASE WHEN @JobArea1 !='' THEN ' and expect_address='''+@JobArea1+''' or expect_address2='''+@JobArea1+''' or expect_address3='''+@JobArea1+''''else '' END
+CASE WHEN @Address !='' THEN ' and residence1='''+@Address+'''' else '' END
+CASE WHEN @Degree !='' and @SelDegree='1' THEN ' and degree>='''+@Degree+''' ' else '' END
+CASE WHEN @Degree !='' and @SelDegree='0' THEN ' and degree='''+@Degree+''' ' else '' END
+CASE WHEN @Public !='' THEN ' and polity='''+@Public+''' ' else '' END
+CASE WHEN @Menoy !='' THEN ' and expect_menoy='''+@Menoy+'''' else '' END
+CASE WHEN @WantAddress1 !='-1' THEN ' and expect_sort='''+@WantAddress1+''' or expect_sort2='''+@WantAddress1+''' or expect_sort3='''+@WantAddress1+'''' else '' END
+CASE WHEN @Drive !='' THEN ' and drive_sort='''+@Drive+'''' else '' END
+CASE WHEN @Experience !='' THEN ' and job_time>='+@Experience+' 'else '' END
+CASE WHEN @Area !='' THEN ' and residence='''+@Area+'''' else '' END
+CASE WHEN @UpdateDate !='' THEN ' and DateDiff(day,refresh_time,Getdate()) <= '+@UpdateDate+''else '' END
+' and age between '''+@Age+''' and '''+@Age1+''''EXEC sp_executesql @sqlend打印出来是好的
declare @sql varchar(8000),@Name  varchar(256),
@Age varchar(256),
@Age1 varchar(256),
@Area varchar(256),
@Address varchar(256),
@Degree varchar(256),
@Drive varchar(256),
@Experience varchar(256),
@JobArea varchar(256),
@JobArea1 varchar(256),
@Menoy varchar(256),
@Public varchar(256),
@Sex varchar(256),
@WantAddress varchar(256),
@WantAddress1 varchar(256),
@UpdateDate varchar(256),
@SelDegree varchar(256)
set @name='DDDD'
set @Age='18'
set @Age1='60'
set @Area='北京'
set @Address='直辖市'
set @Degree='1'
set @Drive='B'
set @Experience='26'
set @JobArea='直辖市'
set @JobArea1='北京'
set @Menoy='0200104000'
set @Public='2'
set @Sex='2'
set @WantAddress='7'
set @WantAddress1='4'
set @UpdateDate='15'
set @SelDegree='1'
set @sql='select * from Person_stuff where 1=1'
+CASE WHEN @Name !='' THEN ' and name = '''+@Name+''''else '' END
+CASE WHEN @Sex !='' THEN ' and Sex='''+@Sex+''''else ''  END
+CASE WHEN @WantAddress !='-1'THEN ' and expect_post = '''+@WantAddress+''' or expect_post2 = '''+@WantAddress+''' or expect_post3 = '''+@WantAddress+''''else '' END
+CASE WHEN @JobArea !='' THEN ' and expect_city='''+@JobArea+''' or expect_city2='''+@JobArea+''' or expect_city3='''+@JobArea+''''else '' END
+CASE WHEN @JobArea1 !='' THEN ' and expect_address='''+@JobArea1+''' or expect_address2='''+@JobArea1+''' or expect_address3='''+@JobArea1+''''else '' END
+CASE WHEN @Address !='' THEN ' and residence1='''+@Address+'''' else '' END
+CASE WHEN @Degree !='' and @SelDegree='1' THEN ' and degree>='''+@Degree+''' ' else '' END
+CASE WHEN @Degree !='' and @SelDegree='0' THEN ' and degree='''+@Degree+''' ' else '' END
+CASE WHEN @Public !='' THEN ' and polity='''+@Public+''' ' else '' END
+CASE WHEN @Menoy !='' THEN ' and expect_menoy='''+@Menoy+'''' else '' END
+CASE WHEN @WantAddress1 !='-1' THEN ' and expect_sort='''+@WantAddress1+''' or expect_sort2='''+@WantAddress1+''' or expect_sort3='''+@WantAddress1+'''' else '' END
+CASE WHEN @Drive !='' THEN ' and drive_sort='''+@Drive+'''' else '' END
+CASE WHEN @Experience !='' THEN ' and job_time>='+@Experience+' 'else '' END
+CASE WHEN @Area !='' THEN ' and residence='''+@Area+'''' else '' END
+CASE WHEN @UpdateDate !='' THEN ' and DateDiff(day,refresh_time,Getdate()) <= '+@UpdateDate+''else '' END
+' and age between '''+@Age+''' and '''+@Age1+''''

print @sql
可是在测试这个脚本的时候报错
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near ','.
Stored Procedure: rcw.dbo.proc_SearchCompanyAll1
Return Code = 0

解决方案 »

  1.   

    print出来
    select * from Person_stuff where 1=1 and name = 'DDDD' and Sex='2' and expect_post = '7' or expect_post2 = '7' or expect_post3 = '7' and expect_city='直辖市' or expect_city2='直辖市' or expect_city3='直辖市' and expect_address='北京' or expect_address2='北京' or expect_address3='北京' and residence1='直辖市' and degree>='1'  and polity='2'  and expect_menoy='0200104000' and expect_sort='4' or expect_sort2='4' or expect_sort3='4' and drive_sort='B' and job_time>=26  and residence='北京' and DateDiff(day,refresh_time,Getdate()) <= 15 and age between '18' and '60'正确的。可是测试这个脚本却不正确。
      

  2.   


    (expect_post = '7' or expect_post2 = '7' or expect_post3 = '7' )
    (expect_city='直辖市' or expect_city2='直辖市' or expect_city3='直辖市')

    这些不需要括号吗?
      

  3.   

    select * 
    from Person_stuff 
    where 1=1 and name = 'DDDD' 
    and Sex='2' and (expect_post = '7' or expect_post2 = '7' or expect_post3 = '7')
    and (expect_city='直辖市' or expect_city2='直辖市' or expect_city3='直辖市')
    and (expect_address='北京' or expect_address2='北京' or expect_address3='北京') 
    and residence1='直辖市' and degree>='1' and polity='2' and expect_menoy='0200104000' 
    and (expect_sort='4' or expect_sort2='4' or expect_sort3='4') 
    and drive_sort='B' and job_time>=26 and residence='北京' 
    and DateDiff(day,refresh_time,Getdate()) <= 15 
    and age between '18' and '60'你用这句运行一下,看能否得出想要的结果?