日期:2014-05-18  浏览次数:20541 次

这样的两个表如何设计呢
有两个表tb1,tb2
tb1 
单号 品名 型号 数量 单价
2012001 西瓜 大号 2 5
2012001 西瓜 小号 2 1
2012001 西瓜 中号 2 3

单号 实收款
2012001 2*5 + 2*1 + 2*3

两个问题
1.如何有tb1记录自动生成tb2呢?当Tb1有该动的时候,tb2也随之改动,
2.tb1表可以优化吗?化成同一个单号下面有多种条目


------解决方案--------------------
tb1 没有感觉不合适,可以再增加一个计算列,直接计算 数量*单价。


alter table tb add 实收款 as 数量*单价

这样你的统计会方便些
------解决方案--------------------
SQL code

--> 测试数据:[tbl1]
if object_id('[tbl1]') is not null drop table [tbl1]
create table [tbl1]([单号] int,[品名] varchar(4),[型号] varchar(4),[数量] int,[单价] int)


if object_id('[tbl2]') is not null drop table [tbl2]
create table [tbl2]([单号] int,实收款 int)


go
if OBJECT_ID('tri_tracy')is not null
drop trigger tri_tracy
go
create  trigger tri_tracy on tbl1
after insert
as
insert tbl2
select [单号],sum(数量*单价) as 实收款 from inserted
group by [单号]


insert [tbl1]
select 2012001,'西瓜','大号',2,5 union all
select 2012001,'西瓜','小号',2,1 union all
select 2012001,'西瓜','中号',2,3

select * from tbl2

/*
单号    实收款
2012001    18
*/

------解决方案--------------------
探讨

tb2不完全是tb1的统计
tb2
单号 应收款 实收款 备注..
2012001 2*5 + 2*1 + 2*3 (用户输入)
所以tb2想单独建一个表,而不是零时的

------解决方案--------------------
探讨

请问TravyLee大侠,如何让之自动触发呢,上面这段是在添加的时候把tb2输入的,我想当tb1任何时候有改动的时候都将tb2自动触发,如何做呢

------解决方案--------------------
探讨

TravyLee大侠,我想要添加,更新,删除对应的根据单号更新tb2,请问该怎样写呢

------解决方案--------------------
探讨

tb1是订单的明细表,tb2是结算的明细表,所以tb2是依附于tb1的,也就是tb1变动,tb2也变动,但是tb2也要手工操作,比如在实收款后面,还要有个备注类似的字段

------解决方案--------------------
不知要达到什么效果
其实个人完全可以不要tb2
查询.汇总什么的.建个视图都可以了
------解决方案--------------------
写一个存储过程,一旦对tb1进行任何操作,都同步修改tb2的数据,放在一个事务里进行。
类似这样:
CREATE PROCEDURE dbo.ABC
--各种参数
AS
BEGIN
SET XACT_ABORT ON 

BEGIN TRANSACTION

--修改tb1

--修改tb2

COMMIT TRANSACTION
END
GO