首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

急 set @a = select XXX有关问题 求解

2012-12-16 
急 set @a select XXX问题求解表结构check_day (dev_id varchar(16), hour_0 varchr(256), hour_0 varch

急 set @a = select XXX问题 求解
表结构check_day (dev_id varchar(16), hour_0 varchr(256), hour_0 varchr(256),....hour_23)
按小时保存一天数据  现在想通过循环取 每个小时的值 如何做
其中 @dev_id 是设备名称 



declare @Hour varchar(10)
declare @s varchar(1024)
declare @HourValue varchar(256)
set @i =0   
while @i < 24 
begin 
        set @Hour = 'Hour_' + cast(@i as char)
        set @s = (' ( select top 1 '+ @Hour + ' from check_day where dev_id = ' + ''''+ @dev_id + ''''   +')')
        exec(@s)  -- 可以执行成功  返回 Hour_0 至 Hour_23 的值
        set @HourValue = exec(@s)   -- 报错  在关键字 'exec' 附近有语法错误。 
        set @i = @i + 1
end


求解 求解 SQL 想把 hour_X 字段的值 分别取出来 放在一个变量里面  改如何
[最优解释]
declare @Hour nvarchar(1000)
declare @s nvarchar(4000)
declare @HourValue nvarchar(1000)
DECLARE @i INT,@dev_id VARCHAR(50)
set @i =0
SET  @Hour=''  
while @i < 24 
        SELECT @Hour = @Hour+CASE WHEN @i=0 THEN '' ELSE '+' END+'Hour_' + cast(@i as VARCHAR(2)),@i = @i + 1
set @s = ' ( select top 1 @HourValue='+ @Hour + ' from check_day where dev_id = ' + ''''+ @dev_id + ''''   +')'
EXECUTE sp_executesql @s,N'@HourValue nvarchar(1000) output',@HourValue  output

PRINT @HourValue



看看是不是这样意思,输出的是合计还是值
[其他解释]
这样设计的table就多写几行代码

while @i < 24  
begin
select top 1 @HourValue  = case when @i=0 then hour_0
                                when @i=1 then hour_1
                                when @i=2 then hour_2
                                ...
                                when @i=23 then hour_23
                           end
from check_day 
where dev_id =  @dev_id 
-- ...
set @i=@i+1


end


[其他解释]
用游标
[其他解释]
exec 出来是个table ,无论table 是多少行 也不能把一个table 直接赋值给一个varchar 
[其他解释]
exec(@s)   已经取得到值了   
现在问题的关键 是把如何把这个  执行的结果 保存到 一个char 变量中去  
[其他解释]
额  3楼的方法是可以的   但是感觉不够灵活
set @HourValue = exec(@s)

这语句为什么出错呢  exec执行后 返回的不是  select 出来的一个字符串吗?
有人能解答吗
[其他解释]
6 楼  那改怎么修改呢  
[其他解释]
set @s = N'set @HourValue = (select top 1 ' + @Hour +'   from check_day where dev_id = ' +''''+ @dev_id  +')'
EXECUTE sp_executesql @s,N'@HourValue nvarchar(1000) output',@HourValue  output

在网上查了下  sp_executesql 
谢谢4楼斑竹 提供的方法
结贴



热点排行