数据库字段设置 在线等待(50分)

  • 主题发起人 主题发起人 xuefeiyang
  • 开始时间 开始时间
X

xuefeiyang

Unregistered / Unconfirmed
GUEST, unregistred user!
sql server 数据库
假设有10个字段(a,b,c,d,e,f,g,h,i,j),前7个(a,b,c,d,e,f,g)存数据(浮点型),
第8,9字段(h,i)分别是计算列:(h=a+b+c+d),(i=e+f+g),
第10个字段是bit型(目前是bit)
if h=i then
j:=1
else
j:=0;
因为字段j是根据字段 h,i来决定其值,而字段 h,i又是计算列,也就是说h,i由sql server
计算其值,那么怎样再能让sql server在计算出 h,i后在计算出j呢?
(在这里只是举例,实际字段很多,所以通过编码计算实在太过复杂)
 
每当更新 h,i 时更新 j
 
在sql server里怎么设置呢?
 
CREATE TRIGGER Tr_Calc ON [dbo].[T_Table]
FOR INSERT,UPDATE
AS
begin
UPDATE T_Table SET h=1 WHERE a+b+c+d=e+f+g
UPDATE T_Table SET h=0 WHERE a+b+c+d<>e+f+g
end;
 
TO delphiland
我是初学,所知不多,请问你刚才写的是过程么?
能说的具体点不?
 
在SQL SERVER中建立Trigger也就是触发器,
每当INSERT和UPDATE数据时自动执行。
 
Select
a+b+c+d as H
,e+f+g as I
( Case if a+b+c+d = e+f+g Then 1 Else 0 End) as T
From 表名
 
TO delphiland
你所说的不是更新一条数据,而是整个数据库
现在我只更新当前数据
 
TO delphiland
数据太多,都更新也太慢
另外因为i,h是计算列,所以又不能单独更新,任何一个字段变化都要更新,是不是太……

还有没有更好的方法或者改进呢?
 

如果只更新新增的数据:
CREATE TRIGGER Tr_Calc ON [dbo].[T_Table]
FOR INSERT,UPDATE
AS
begin
UPDATE T_Table SET j=1 FROM T_Table,INSERTED ins WHERE (ins.a+ins.b+ins.c+ins.d=ins.e+ins.f+ins.g)AND(ins.ID=T_Table.ID)
...
end;
 
更新新增或修改的当前数据
请注意是‘当前数据’,而不是批量更新
 
Inserted表和Deleted表仅仅在触发器运行时存在。
Inserted表内包含了所有已经插入到表内的新记录。
同样可以使用Inserted表和Deleted表来记录UPDATE对触发器所在的表所做的改动。当一个和触发器相关的表内的数据被修改时,
Deleted表包含了所有列在修改之前的值,而Inserted表包含了所有列在修改之后的值。
 
请束我愚钝,还是不太明白该如何操作阿
 
他们说的对啊
做一个触发器就可以了,
 
请问,你的h,i数据是否是在a,b,c,d,e,f,g的数据输入后就产生了,然后最后再一起计算j项的数字啊?
 
每当你新增记录时,SQL SERVER会把新增的记录放到INSERTED表中
更新记录时,SQL SERVER会在INSERTED表和DELETED表中各放一份
新的数据和旧的数据,
通过对INSERTED表和DELETED表操作,不就是更新了你的“当前数据”吗

你可以找本SQL SERVER的书来好好研究研究。
 
To coclete
h,i 设为计算列,由sql server计算,然后才能判断j的真假
 
在计算字段的计算过程中判断一下再更新也未尝不可
 
你的你的h,i数据是否是在a,b,c,d,e,f,g的数据输入后用触发器产生的,
如果是,那你就直接用触发器来计算出j的数字。
 
TO delphiland
你的思路我大体明白,可是好像有点得不偿失的感觉
仅为更新一个当前字段的值而要对两个表进行比较?
更何况随着数据的增多,会越来越慢
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
911
SUNSTONE的Delphi笔记
S
后退
顶部