set @sql = @sql+ '日期 = '''+ CONVERT ( varchar(10) ,@日期,120) +''','

解决方案 »

  1.   

    to cceo()你说的对,可是为什么呢?解释一下!谢谢
      

  2.   

    日期型的变量要用单引号。
    如果单引号出现在SQL语句中,要用两个单引号代替,这样不会和关键字搞混
      

  3.   

    set @sql = @sql+ '日期 = '+ CONVERT ( varchar(10) ,@日期,120) +','
    结果:
    @sql =     ... 日期 = 2002-08-13 ...set @sql = @sql+ '日期 = '''+ CONVERT ( varchar(10) ,@日期,120) +''','
    结果:
    @sql =     ... 日期 = '2002-08-13' ...
    你在查询分析器执行select 日期 = 2002-08-13

    select 日期 = '2002-08-13'就知道区别了
      

  4.   

    再问一下:
    在写存储过程的时候究竟是只传入一个字符串,然后让程序去执行,还是传入n个参数在存储过程里面写要执行的字符串那种效率要高.example:
    ALTER PROCEDURE Hctrack_login.查询a表
    @input1    varchar(1000)=null
    AS 
    declare @sql varchar(1000)
    set @sql = 'select * from 部队基本情况 where  ' +@input1  
             exec(@sql)
    ALTER PROCEDURE Hctrack_login.查询a表
                @参参数数1  varchar(20) = null,
      @参数2  char(10)   =  null,
    @参数3  varchar(40) = null
    AS
    declare @sql varchar(1000)
    set @sql = 'select * from a表 where  ' 
    if (@参数1<>'') set @sql = @sql+ '(参数1='+ @参数1 +')and'
    if (@参数2<>'') set @sql = @sql+ '(参数2='+ @参数2 +')and'
    if (@参数3<>'') set @sql = @sql+ '(参数3='+ @参数3 +')and'
             set @sql = left(@sql,len(@sql)-3)
             exec(@sql)
    RETURN 0