出现了一个比较棘手的难点,1.时间参数应该怎么转换才可以正常查询??2.怎么才能把查询的结果EXEC(@num)再放到变量里,和别的变量计算???? --声明一系列变量,放置创建连接的基本信息。
DECLARE @provider VARCHAR(20)
DECLARE @username VARCHAR(20) --登录名
DECLARE @pwd VARCHAR(20)  --密码
DECLARE @database VARCHAR(20)--数据库名
DECLARE @server VARCHAR(20) --ip--通过select查询获得上面的变量
*********--问题出在这
--时间参数
DECLARE @time DATETIME 
SET @time = CONVERT(VARCHAR(10),GETDATE()-1)
--获得统计的数量
DECLARE @num VARCHAR(500)
set @num ='SELECT COUNT(*) FROM ' +@snk+ '.' +@database+ '.dbo.' +@table_name+ ' WHERE opcode=''' +@wscode+ '''''and date>'''+@time+'''''AND date<'''+@time+1 '''' 
EXEC(@num)
--时间参数提示无法把datetime转换成varchar,>@time,<@time+1获得一天之内的时间范围,请问这里怎么转换才能正常运行?????
--之后想把EXEC(@num)获得的结果再放在一个变量里,转换成能计算的变量然后要能在后面再和其他变量进行运算????
如:SELECT @num*@money
SELECT @num/@int --等等之类的计算,大家帮忙想想由于@num是VARCHAR,而且查询的EXEC(@num)不知道能不能再放进变量,后面的@int,@money是从别的查询语句中查出的变量,同样存在需要转型的问题??
这里是不是要使用临时表把结果写进去再和别的变量计算???

解决方案 »

  1.   

    DECLARE @time DATETIME 
    SET @time = CONVERT(VARCHAR(10),GETDATE()-1,120)
    --获得统计的数量
    DECLARE @num nVARCHAR(500),@i int
    set @num ='SELECT @i = COUNT(*) FROM ' +@snk+ '.' +@database+ '.dbo.' +@table_name+ ' WHERE opcode=''' +@wscode+ ''' and datediff(d,date,'''+convert(char(10),@time,120)+''' between 0 and 1 "
    exec sp_excutesql @num,'@i int output',@i output
    select @I--
      

  2.   

    “set @num ='SELECT @i = COUNT(*) FROM ..."
    @i = COUNT(*) @i这里也要加引号和加号分隔开吧????
      

  3.   

    应该没有问题的,已经转换成varchar类型了不是.如果再不行,楼主试试将date这个字段先进行一次cast转换.
      

  4.   

    CONVERT(VARCHAR(10),GETDATE(),120) 
      

  5.   

    一楼朋友的方法,运行时报了下面的错误!!DECLARE @start_time NVARCHAR(60) 
    SET @start_time = CONVERT(NVARCHAR(10),GETDATE()-1,120)
    SELECT @start_time--指标
    DECLARE @wscode NVARCHAR(50)
    SET @wscode='aa123'
    --统计用户量
    DECLARE @num NVARCHAR(500),@i intset @num = 'SELECT @i = COUNT(*) FROM ' +@snk+ '.' +@database+ '.dbo.' +@table_name+ ' WHERE opcode= ''' +@wscode+ ''' and datediff(d,date,''' +convert(char(10),@start_time,120)+ ''' between 0 and 1'''EXEC sp_executesql @num,'@i int output',@i output
    '消息 214,级别 16,状态 3,过程 sp_executesql,第 1 行
    过程需要类型为 'ntext/nchar/nvarchar' 的参数 '@parameters'。'
      

  6.   


    EXEC sp_executesql @num,N'@i int output',@i output
      

  7.   

    DECLARE @start_time NVARCHAR(60) 
    SET @start_time = CONVERT(NVARCHAR(10),GETDATE()-1,120)
    SELECT @start_time--指标
    DECLARE @wscode NVARCHAR(50)
    SET @wscode='aa123'
    --统计用户量
    DECLARE @num NVARCHAR(500),@i intset @num = 'SELECT @i = COUNT(*) FROM ' +ltrim(@snk)+ '.' +ltrim(@database)+ '.dbo.' +ltrim(@table_name)+ ' WHERE opcode= ''' +ltrim(@wscode)+ ''' and datediff(d,date,''' +convert(char(10),@start_time,120)+ ''' between 0 and 1'''EXEC sp_executesql @num,'@i int output',@i output
    '消息 214,级别 16,状态 3,过程 sp_executesql,第 1 行
    过程需要类型为 'ntext/nchar/nvarchar' 的参数 '@parameters'。'
      

  8.   

    最后一句改成
    [sql]
    EXEC sp_executesql @num,'@i int output',@i output
    [/sql]
      

  9.   

    最后一句改成 EXEC sp_executesql @num,N'@i int output',@i output