单据审批流程的sql如何写
有一个表用来存储业务流程,即审批流程的定义,说明如下
f_bmbm表示需要经过审批的部门,f_xh 表示先后顺序,f_must表示流程中必须经过这个部门的审核
create table tbnote_check_order
(
f_xh int Not Null, --序号
f_bmbm varchar(15) Not Null, --部门编码
f_must int Not Null, --必须(0否1是)
Constraint tbnote_check_order_key Primary Key(f_xh)
)
具体业务流程中,所有审批信息全部存储在另外一个字段f_spyj,这里面的格式是这样存储的
|linebegin| --行前缀,表示一个部门的审批开始
|lineend| --行后缀,表示一个部门的审批结束
|bmbegin| --部门前缀,表示审批的部门
|bmend| --部门后缀,表示审批的部门
|ygbmbegin| --员工前缀,表示审批的部门的员工
|ygbmend| --员工后缀,表示审批的部门的员工
举个例子,f_spyj里存的信息如下:
|linebegin|20070101|bmbegin|001|bmend||ygbmbegin|yg01|ygbmend|审要通过 |lineend|
现在问题如下:
1,如何判断某个部门审批已经在了
2,如何判断所有审批已经全了
3,如何删除一条审批信息
------解决方案----------------------1
select * from tbName where charindex( '|bmbegin|部門ID|bmend| ', f_spyj)> 0
------解决方案--------------------用replace()函數
------解决方案-------------------- declare @str varchar(100)
set @str= '|bmbegin|001|bmend| '
select replace(replace(@str, '|bmbegin| ', ' '), '|bmend| ', ' ')
--result
001
(1 row(s) affected)
------解决方案--------------------這樣的表結構不好做
------解决方案--------------------一行可能有多個|linebegin|, |lineend| 是嗎?
------解决方案--------------------学习
------解决方案--------------------表結構有間題
------解决方案--------------------/*
设计思路:先得到tbnote_check_order中全部必须审核的部门的数目,然后在对审批信息进行解码,遇到部门字符时进行判断是不是必须审核部门,
如果条件成立,则表示所有的审核流程中的其中一个已经满足,循环结束可得知审批信息中所包含的必须审核部门数目是否等于tbnote_check_order
中规定的数目
参数说明:
@vDjlxbm
表示要进行审核的单据类型
@vSpInfo
传入的审批信息字符串
返回参数:
@iIsOver
0表示没有
1表示全部通过
2表示没有审批流程
*/
create procedure p_SpIsOver(@vDjlxbm varchar(3),@vSpInfo varchar(8000),@iIsOver int output)