急 set @a = select XXX问题 求解

wanabe 2012-11-13 10:01:28
表结构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 字段的值 分别取出来 放在一个变量里面 改如何
...全文
251 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanabe 2012-11-13
  • 打赏
  • 举报
回复
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楼斑竹 提供的方法 结贴
wanabe 2012-11-13
  • 打赏
  • 举报
回复
6 楼 那改怎么修改呢
开启时代 2012-11-13
  • 打赏
  • 举报
回复
exec 出来是个table ,无论table 是多少行 也不能把一个table 直接赋值给一个varchar
wanabe 2012-11-13
  • 打赏
  • 举报
回复
额 3楼的方法是可以的 但是感觉不够灵活
set @HourValue = exec(@s)
这语句为什么出错呢 exec执行后 返回的不是 select 出来的一个字符串吗? 有人能解答吗
中国风 2012-11-13
  • 打赏
  • 举报
回复
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
看看是不是这样意思,输出的是合计还是值
playwarcraft 2012-11-13
  • 打赏
  • 举报
回复
这样设计的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
wanabe 2012-11-13
  • 打赏
  • 举报
回复
exec(@s) 已经取得到值了 现在问题的关键 是把如何把这个 执行的结果 保存到 一个char 变量中去
快溜 2012-11-13
  • 打赏
  • 举报
回复
用游标

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧