这样的数据库约束如何建立? FOR SQL SERVER7(100分)

  • 主题发起人 主题发起人 吴剑明
  • 开始时间 开始时间

吴剑明

Unregistered / Unconfirmed
GUEST, unregistred user!
库存资料相减 ,总会出现库存不够,一不小心就出个负数出来。

有什么方法,直接在数据库方面设置,一旦该字段出现负数,就拒绝更新?
因为我是在程序里直接显示调用事务的,如果再在数据库上用触发器,可能
效率慢,也可能在程序中已经“成功”了,又记下了流水,而数据库却又“失败”
了,回滚了。:(
所以能否建立这样的字段约束?
 
试下这个
create rule oldwu as
@kucunrange>0
执行以下存储过程
sp_bindrule oldwu, 'yourtalbe.kucun'
纸上谈兵,第一次自己定义约束,不知道对否
 
0、我想可以出现负数,但必须提醒用户,只是一种操作方法的提议,这和实际情况有关,
随便说说。
1、Trigger的速度应该不会很慢
2、>>程序中已经“成功”了,又记下了流水,而数据库却又“失败”了
Rollback后,可以控制程序不允许它出现successd啊,
没全理解!
 
我认为你不用建立字段约束,只需在程序中判断 if 出库数>库存 then 提示用户并拒绝进
行等措失。
 
在客户端做判断不是更好吗?同意k!
 
interbase5.5的例子:year 同样,你可以定义某个字段值必须>0
CREATE TABLE PROJ_DEPT_BUDGET (
year INTEGER NOT NULL CHECK (YEAR >= 1993),
proj_id PROJNO NOT NULL,
dept_no DEPTNO NOT NULL,
quart_head_cnt INTEGER [4],
projected_budget BUDGET,

PRIMARY KEY (year, proj_id, dept_no),
FOREIGN KEY (dept_no) REFERENCES department (dept_no),
FOREIGN KEY (proj_id) REFERENCES project (proj_id));
 
使用约束是个不错的主意,其实你担心的是二个问题:
1。效率,其实在损失一点点效率和维护数据完整性二者中那个更重要呢?
当然是数据库完整性。
2。事物处理,其实你可以取@@ERROR系统变量的值来判断是否一个操作成功,
可以把这个值返回给客户端,“0”表示成功,其他为错误码。
不知对你是否有帮助?
 
多人接受答案了。
 
后退
顶部