declare @tiaojian nvarchar(500);
declare @dateandtime char(10);
declare @num int;
declare @nummax int;
declare @ipnum int;
declare @ipnummax int;
exec sp_executesql N'select @num=sum(num),@nummax=max(num),@ipnum=sum(ip),@ipnummax=max(ip) from  (select num=count(1),ip=count(distinct ip) from T_count_urlrequestlog A where convert(char(10),requesttime,120)=@dateandtime group by convert(char(13),requesttime,120))aa--) as dec(8,4)))'
这个语句说服务器: 消息 137,级别 15,状态 1,行 1
必须声明变量 '@num'。
服务器: 消息 137,级别 15,状态 1,行 1
必须声明变量 '@dateandtime'。
这是怎么回事。

解决方案 »

  1.   


    exec sp_executesql N'declare @tiaojian nvarchar(500);
    declare @dateandtime char(10);
    declare @num int;
    declare @nummax int;
    declare @ipnum int;
    declare @ipnummax int; select @num=sum(num),@nummax=max(num),@ipnum=sum(ip),@ipnummax=max(ip) from  (select num=count(1),ip=count(distinct ip) from T_count_urlrequestlog A where convert(char(10),requesttime,120)=@dateandtime group by convert(char(13),requesttime,120))aa--) as dec(8,4)))'
      

  2.   

    sp_executesql 不是这样用的sp_executesql [@stmt =] stmt

        {, [@params =] N'@parameter_name  data_type [,...n]' } 
        {, [@param1 =] 'value1' [,...n] }
    ]
    语句中所用到的变量需要以第二参数的形式声明
      

  3.   

    晕菜,必须要用exec sp_executesql因为实际上我这个语句是拼起来的。
    发现出错之后我才用这个来做测试的。不是多此一举
      

  4.   

    具体怎么弄呢
    declare @tiaojian nvarchar(500);
    declare @dateandtime char(10);
    declare @num int;
    declare @nummax int;
    declare @ipnum int;
    declare @ipnummax int;
    exec sp_executesql N'select @num=sum(num),@nummax=max(num),@ipnum=sum(ip),@ipnummax=max(ip) from  (select num=count(1),ip=count(distinct ip) from T_count_urlrequestlog A where convert(char(10),requesttime,120)=@dateandtime group by convert(char(13),requesttime,120))aa--) as dec(8,4)))',N'@num int',N'@nummax int',N'@dateandtime char(10)'这样还是不对。
      

  5.   

    --不会写的话,多看看联机的例子再写语句
    --trydeclare @tiaojian nvarchar(500);
    declare @dateandtime char(10);
    declare @num int;
    declare @nummax int;
    declare @ipnum int;
    declare @ipnummax int;
    exec sp_executesql
    N'select @num=sum(num),@nummax=max(num),@ipnum=sum(ip),@ipnummax=max(ip) from  (select num=count(1),ip=count(distinct ip) from T_count_urlrequestlog A where convert(char(10),requesttime,120)=@dateandtime group by convert(char(13),requesttime,120))aa--) as dec(8,4)))',
    N'@num int out,@nummax int out,@ipnum int out,@ipnummax int out,@dateandtime char(10)',@num out,@nummax out,@ipnum out,@ipnummax out,N'2006-1-1'