读书人

这样的两个表怎么设计呢

发布时间: 2012-04-28 11:49:53 作者: rapoo

这样的两个表如何设计呢
有两个表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)goif OBJECT_ID('tri_tracy')is not nulldrop trigger tri_tracygocreate  trigger tri_tracy on tbl1after insertasinsert tbl2select [单号],sum(数量*单价) as 实收款 from insertedgroup by [单号]insert [tbl1]select 2012001,'西瓜','大号',2,5 union allselect 2012001,'西瓜','小号',2,1 union allselect 2012001,'西瓜','中号',2,3select * 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

读书人网 >SQL Server

热点推荐