呵呵,请面非常感谢j9988高手与其他高手,我现在又有一个类似的问题要问题各位高手,还请高手能进来指点指

我有两个表
一个是表名:tb_gradestandard这是一个大的评分标准表
列名 数据列型 长度 允许空值
gs_id int 4
gs_standard char 20
gs_percent float 8
gs_memo char 100
另外一个表是 tb_sgradestandard 这是一个根据前面大的评分标准而生成的小的评分标准!
列名 数据列型 长度 允许空值
sgs_id int 4
sgs_standard char 20
sgs_percent float 8
gs_id int 4
sgs_memo char 100
这个表根据gs_id 与前面一个表的gs_id 相关联。现在我要控制当tb_sgradestandard的gs_id等于tb_gradestandard的gs_id 相等时在tb_sgradestandard里的sgs_percent的
总和值不能超过tb_gradestandard的gs_percent,且在tb_sgradestandard里总值不能超过100。
其实这个问题就是tb_sgradestandard分类汇总后然后把汇总值分别与tb_gradestandard的值比较。根据相同的gs_id值来比较!因为我对SQL语句很不熟悉,所以还请各位能指点一下。

---------------------------------------------------------------

declare @条件id int,@temp1 int,@temp2 int

select @temp1=isnull(sum(sgs_percent),0) from tb_sgradestandard group by sgs_id where sgs_id=@条件id

select @temp2=sgs_percent from tb_gradestandard where sgs_id=@条件id

if (@temp1>@temp2 or @temp>100)
select '错误!'
else
select 'OK!'

---------------------------------------------------------------

想一想,少了一个ORDER BY DESC
create trigger tri_test on tb_sgradestandard
on insert,update
as
begin
declare @i int,@j int
declare @a int,@b int

set @a=(select top 1 sum(b.sgs_percent) from inserted a,tb_sgradestandard b where a.gs_id=b.gs_id group by gs_id order by sum(b.sgs_percent) desc)

set @b=(select top 1 sum(b.gs_percent) from inserted a,tb_gradestandard b where a.gs_id=b.gs_id group by gs_id order by sum(b.sgs_percent) desc)

if isnull(@a,0)>isnull(@b,0) or isnull(@a,0)>100
roalback

end

tb_gradestandard:

create trigger tri_test2 on tb_gradestandard
on update,delete
as
begin
declare @i int
declare @a int,@b int
select @i=count(*) from inserted
if @i<>0
begin
set @a=(select top 1 sum(b.sgs_percent) from inserted a,tb_sgradestandard b where a.gs_id=b.gs_id group by gs_id order by sum(b.sgs_percent) desc)

set @b=(select top 1 sum(b.gs_percent) from inserted a,tb_gradestandard b where a.gs_id=b.gs_id group by gs_id order by sum(b.sgs_percent) desc)
end
if @i=0
begin
set @a=(select top 1 sum(b.sgs_percent) from deleted a,tb_sgradestandard b where a.gs_id=b.gs_id group by gs_id order by sum(b.sgs_percent) desc)

set @b=(select top 1 sum(b.gs_percent) from deleted a,tb_gradestandard b where a.gs_id=b.gs_id group by gs_id order by sum(b.sgs_percent) desc)
end
if isnull(@a,0)>isnull(@b,0) or isnull(@a,0)>100
roalback

end

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus