当前位置: 代码迷 >> Sql Server >> 【请问】数据库端怎么锁定业务单据
  详细解决方案

【请问】数据库端怎么锁定业务单据

热度:53   发布时间:2016-04-24 10:37:19.0
【请教】数据库端如何锁定业务单据
各位大神:
    ERP系统中经常有锁定单据不允许修改的需求。比如月结之后历史单据不允许修改,下游单据开始执行之后上游单据不允许修改等。
    请问这种逻辑可以在数据库后台实现吗?还是推荐在前台程序实现?
------解决方案--------------------
这个还是建议在前台程序实现比较好。
------解决方案--------------------
锁单功能应该是erp软件提供的功能,靠数据库设计+编码实现,不明白你说的数据库后台和前台程序指什么,前台程序一般指的都是带ui界面的客户端,难道楼主把操作数据库功能写在客户端的代码上吗?
------解决方案--------------------
单据增加状态字段,后续业务引用了单据的话,更新状态。通过状态字段控制是否能修改
------解决方案--------------------
这个具体没有做过
我说说我的想法,仅供参考
可以将需要锁单的记录设置一个状态,比如status列 0,1,2,3....不同的值代表不同的含义
假设1表示锁单 修改的时候 先判断这个状态 如果是1就返回,不做任何操作,或返回个提示信息
------解决方案--------------------
引用:
单据增加状态字段,后续业务引用了
------解决方案--------------------
建议不要用触发器。判断状态的话,前台执行。更新状态建议用事务
引用:
就是说这些状态判断,还是再前台执行比较好?
如果放在服务器端,我想到的就是 UPDATE、DELETE 触发器。担心触发器搞多了数据库就难维护了。
Quote: 引用:

单据增加状态字段,后续业务引用:
这个具体没有做过
我说说我的想法,仅供参考
可以将需要锁单的记录设置一个状态,比如status列 0,1,2,3....不同的值代表不同的含义
假设1表示锁单 修改的时候 先判断这个状态 如果是1就返回,不做任何操作,或返回个提示信息


引用:
这个具体没有做过
我说说我的想法,仅供参考
可以将需要锁单的记录设置一个状态,比如status列 0,1,2,3....不同的值代表不同的含义
假设1表示锁单 修改的时候 先判断这个状态 如果是1就返回,不做任何操作,或返回个提示信息

------解决方案--------------------
数据库的锁定应该是数据行级别的,比如在表的增加一个字段,程序修改前判定这个字段状态来确认是否可以修改

实在要彻底禁止数据库的访问你应该从APP实现,你特别喜欢服务器端,请自己建立web service之类的东西搞定

------解决方案--------------------
这个 数据库 和前台联合实现的 前台判断 数据库表中的一个字段 的值
这个值 在 前台 是一个枚举 0,1
0 表示 可以修改
1 表示 不可以修改
前台接收数据 时 判断这个值就行
------解决方案--------------------
引用:
说实话,我个人心里有点问题,老怀疑前台程序员的水平,想在后台限死他们。
让他们前台的就做一个界面,能呈现、能交互就行了,业务逻辑我全包了。

这个观点我不赞同,这就回到了是否要用存储过程替代程序来完成所有操作的问题上了。我的看法是,既然锁单是一项功能,那么功能性的东西就应该由程序去完成,而不应该放在数据层面.
------解决方案--------------------
楼主对锁定概念有误解,这是典型的设计问题
对于历史数据或单据已流到下个流程禁修改,可以TRIGGER,可以程序控制
但单据锁定,这需要程序控制
比如抓取单据时,就记录下单据号。。。当然要先判断有没被其他人有抓取,处理完后释放此单据号
KD就是这机制。。。UF没关注
  相关解决方案