写了一个测试用的存储过程
CREATE PROCEDURE test 
(
@startTime datetime,
@aa int
)
as
begindeclare @SQL varchar(1000)
 set @SQL='select * from Customer where ApplyTime>='
 if @aa<>0
begin
set @SQL=@SQL+@startTime
end exec sp_executesql  @SQL  END  
  return
哪位大G帮我看看是咋回事呀.老说字符串转日期类型出错.明明@startTime就是日期类型呀.

解决方案 »

  1.   

    CREATE   PROCEDURE   test   

    @startTime   datetime, 
    @aa   int 

    as 
    begin declare   @SQL   varchar(1000) 
      set   @SQL='select   *   from   Customer   where   ApplyTime> =' 
      if   @aa <> 0 
    begin 
    set   @SQL=@SQL+''''+cast(@startTime as varchar) + '''' 
    end   exec   sp_executesql     @SQL     END     
        return
      

  2.   

    CREATE   PROCEDURE   test   

    @startTime   datetime, 
    @aa   int 

    as 
    begin declare   @SQL   varchar(1000) 
      set   @SQL='select   *   from   Customer   where   ApplyTime> =' 
      if   @aa <> 0 
    begin 
    set   @SQL=@SQL+''''+@startTime+'''' ----加引号
    end   exec   sp_executesql     @SQL     END     
        return 
      

  3.   


    --改
    Declare @SaleNumSum int
    exec('Select ['+ @SaleNumSum +'] = sum(SaleNum) from [200608] where StoreID = 24')--如何将exec执行结果放入变量中? declare @num int, 
                   @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
    --------------------------------------------------------------------------------动态sql语句基本语法 
    1 :普通SQL语句可以用Exec执行 eg:   Select * from tableName 
             Exec('select * from tableName') 
             Exec sp_executesql N'select * from tableName'    -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg:   
    declare @fname varchar(20) 
    set @fname = 'FiledName' 
    Select @fname from tableName              -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
    Exec('select ' + @fname + ' from tableName')     -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 
    declare @fname varchar(20) 
    set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功 
    exec sp_executesql @s   -- 此句会报错 declare @s Nvarchar(1000)  -- 注意此处改为nvarchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功     
    exec sp_executesql @s   -- 此句正确 3. 输出参数 
    declare @num int, 
            @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) 
    --如何将exec执行结果放入变量中? declare @num int, 
                   @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  4.   


    以上两位大G.你们提示的方法我之前都用过.全部都报错.一个报跟我同样的错.一个报"过程需要参数 '@statement' 为 'ntext/nchar/nvarchar' 类型。"......
      

  5.   

    @statement'   为   'ntext/nchar/nvarchar'   类型。"...
    ---
     declare statement  nvarchar(1000)//这样就OK
      

  6.   

    alter    PROCEDURE   #test   

    @startTime   datetime, 
    @aa   int 

    as 
    begin declare   @SQL   varchar(1000) 
      set   @SQL='select   *   from   pubs..employee   where   hire_date>=' 
      if   @aa <> 0 
    begin 
    set   @SQL=@SQL+convert(varchar(10),@startTime ,120)
    exec (@SQL) 
    end 
    end
      

  7.   

    我的代码已经测试过了:--创建
    create   proc ghtest   
    @starttime datetime, 
    @aa int 
    as 
    declare @sql varchar(1000) 
    set @sql='select * from employee where hire_date >= ' 
    if @aa <> 0 
    begin 
    set @sql=@sql+''''+convert(varchar(10),@starttime ,120)+''''
    print @sql
    exec (@sql) 
    end --调用
    declare @t datetime
    set @t=getdate()
    exec ghtest @T,2
      

  8.   

    1.你的参数是日期型,你传的实参也必须是日期型.
    2.存贮过程中,必须将日期型参数转成字符串型才能与sql语句相连接.
      

  9.   

    CREATE   PROCEDURE   test   

    @startTime   datetime, 
    @aa   int 

    as 
    begin 
    declare   @SQL   varchar(1000) 
      set   @SQL='select   *   from   Customer   where   ApplyTime> =' 
      if   @aa <> 0 
    begin 
    set   @SQL=@SQL+''''+@startTime+''''    ----加引号
    end 
      exec   sp_executesql     @SQL 
        END     
        return