新人SQL server 2008中用触发器创建复杂的公式(参数引用其它表中数据),出有关问题,求指点
新人求助:SQL server 2008中用触发器创建复杂的公式(参数引用其它表中数据),出问题,求指点
[size=18px][b]有两个表,一个是JGDCB,一个是二元形高参数表;表JGDCB中存储:每公顷断面积、胸径、树高、树种、蓄积量;二元形高参数表中存储:树种,a,b,c(abc为不同树种的参数值);
现在创建了一个触发器,希望输入每公顷断面积、胸径、树高和树种后,自动计算得到蓄积量,公式如下
每公顷蓄积=每公顷断面积*a*树高的b次方/胸径的c 次方
a,b,c 存储在二元形高参数表里,,,根据树种不同,a,b,c参数取值不同,
创建的触发器如下
触发器如下
create trigger JGB_tri
on JGDCB
for insert
as
begin transaction
update JGDCB
set 每公顷蓄积 = 每公顷断面积*(selecta from 二元形高参数表)*power(树高,(select b from 二元形高参数表))/power(胸径,(select c from 二元形高参数表))
where EXISTS ( select a,b,c from 二元形高参数表 where JGDCB.树种 = 二元形高参数表.树种名称)
commit transaction
可以保存,但是在运行输入的时候,出现错误查询返回的值不止一个当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
初学者,现学现卖,遇到问题很多,,求教大神,使用触发器是否是实现此计算功能较好的方法?还有啥方法?我做触发器问题出在哪?
新人分数不多,还请各位大神不吝赐教,,,,,拜谢
------解决思路----------------------
------解决思路----------------------
只更新插入相关的,不要全表更新。
------解决思路----------------------
EXCEL 中小数都是按浮点双精度运算的,所以你应该统一转换为float运算,结果保存在 numeric(4,1) 字段中没关系。
[size=18px][b]有两个表,一个是JGDCB,一个是二元形高参数表;表JGDCB中存储:每公顷断面积、胸径、树高、树种、蓄积量;二元形高参数表中存储:树种,a,b,c(abc为不同树种的参数值);
现在创建了一个触发器,希望输入每公顷断面积、胸径、树高和树种后,自动计算得到蓄积量,公式如下
每公顷蓄积=每公顷断面积*a*树高的b次方/胸径的c 次方
a,b,c 存储在二元形高参数表里,,,根据树种不同,a,b,c参数取值不同,
创建的触发器如下
触发器如下
create trigger JGB_tri
on JGDCB
for insert
as
begin transaction
update JGDCB
set 每公顷蓄积 = 每公顷断面积*(selecta from 二元形高参数表)*power(树高,(select b from 二元形高参数表))/power(胸径,(select c from 二元形高参数表))
where EXISTS ( select a,b,c from 二元形高参数表 where JGDCB.树种 = 二元形高参数表.树种名称)
commit transaction
可以保存,但是在运行输入的时候,出现错误查询返回的值不止一个当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
初学者,现学现卖,遇到问题很多,,求教大神,使用触发器是否是实现此计算功能较好的方法?还有啥方法?我做触发器问题出在哪?
新人分数不多,还请各位大神不吝赐教,,,,,拜谢
------解决思路----------------------
--试试这样
create trigger JGB_tri
on JGDCB
for insert
as
begin transaction
update JGDCB
set 每公顷蓄积 = 每公顷断面积*tb2.a*power(树高,tb2.b)/power(胸径,tb2.c)
from 二元形高参数表 as tb2 join JGDCB on JGDCB.树种=tb2.树种
commit transaction
------解决思路----------------------
...
UPDATE JGDCB
SET JGDCB.每公顷蓄积 = t.每公顷蓄积
FROM JGDCB,
(
SELECT i.ID,
i.每公顷断面积*p.power(i.树高,p.b)/power(i.胸径,p.c) AS 每公顷蓄积
FROM inserted i
JOIN 二元形高参数表 p
ON i.树种 = p.树种名称
) t
WHERE JGDCB.ID = t.ID
...
只更新插入相关的,不要全表更新。
------解决思路----------------------
EXCEL 中小数都是按浮点双精度运算的,所以你应该统一转换为float运算,结果保存在 numeric(4,1) 字段中没关系。