学艺不精,对sql临时变量赋值的语法规则掌握不牢。最近,写了一段代码,但提交执行时,始终提示“域错误”,百思不得其解。望各位仁兄不吝赐教!
declare @coefficient_value float
update T_2013_12 set @coefficient_value=power((T_2013_12.interm_1-range_rule.min_2013)/(range_rule.max_2013-range_rule.min_2013),1.4)*40+60
from T_2013_12
inner join range_rule
on T_2013_12.index_id = range_rule.index_id
UPDATE T_2013_12 SET evaluate_mark_2013_1court =
case when T_2013_12.variation_char=1 and T_2013_12.interm_1>range_rule.min_2013 then 60
when T_2013_12.variation_char=2 and T_2013_12.interm_1<range_rule.min_2013 then 60
else( case when @coefficient_value<60 then 60
when @coefficient_value>100 then 100
else @coefficient_value end)
end
from T_2013_12
inner join range_rule
on T_2013_12.index_id = range_rule.index_id
------解决方案--------------------
--变量赋值
select @coefficient_value=power((T_2013_12.interm_1-range_rule.min_2013)/(range_rule.max_2013-range_rule.min_2013),1.4)*40+60 from T_2013_12 inner join range_rule on T_2013_12.index_id = range_rule.index_id
------解决方案--------------------
;with cte as
(
select a.index_id,b.min_2013,
power((a.interm_1 - b.min_2013)
/(a.max_2013 - b.min_2013),1.4)*40+60 as iscontrl
from T_2013_12 a inner join range_rule b
on a.index_id = b.index_id
)
update a
set a.evaluate_mark_2013_1court =
case when a.variation_char= 1 and a.interm_1 > b.min_2013
then 60
when a.variation_char = 2 and a.interm_1 < b.min_2013
then 60
else(case when b.iscontrl<60
then 60
when b.iscontrl>100
then 100
else b.iscontrl end)
end
from T_2013_12 a inner join cte b
on a.index_id = b.index_id
这样试试如何!
------解决方案--------------------
update T_2013_12 set @coefficient_value=power((T_2013_12.interm_1-range_rule.min_2013)/(range_rule.max_2013-range_rule.min_2013),1.4)*40+60
from T_2013_12
亲,此处不能用update,update是更新数据,与赋值语句还是不一样的
update table_name set 字段=new_value [where 条件] --后面没有[from]
------解决方案--------------------
赋值,除了SELECT ,SET
没见过使用update的
--模拟场景
declare @a table (a int,b int)
declare @b table (a int,b int)
declare @x int
set @x=90 --此处,你的赋值我看出来了,你是需要个类似于循环或者游标。
insert into @a(a,b) values (1,1),(2,3),(3,4)
insert into @b(a,b) values (1,1),(2,3),(3,4)
update @a set b= case when a.a=1 and a.a=b.a then 60 when a.a=2 and a.a=b.a then 80 else (case when @x>90 then 190 when @x<95 then 200 end) end
from @a as a inner join @b as b on a.a=b.a
---结果展示--
/*
(3 行受影响)
(3 行受影响)
(3 行受影响)
*/
------解决方案--------------------
UPDATE A SET TOTAL=S.TOTAL, MAIN=S.MAIN, OTHER=S.OTHER
------解决方案--------------------