VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3600|回复: 30

单据审批流程的sql如何写

[复制链接]

1

主题

15

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-1-8 10:00:01 | 显示全部楼层 |阅读模式
有一个表用来存储业务流程,即审批流程的定义,说明如下
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,如何删除一条审批信息

回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-1-9 08:27:02 | 显示全部楼层
--1
select * from tbName where charindex('|bmbegin|部門ID|bmend|', f_spyj)>0
回复

使用道具 举报

1

主题

15

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-1-9 10:09:01 | 显示全部楼层
4,如何在显示时,以下这些标记不要显示
|linebegin|               --行前缀,表示一个部门的审批开始
|lineend|               --行后缀,表示一个部门的审批结束
|bmbegin|               --部门前缀,表示审批的部门
|bmend|               --部门后缀,表示审批的部门
|ygbmbegin|               --员工前缀,表示审批的部门的员工
|ygbmend|               --员工后缀,表示审批的部门的员工
回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-1-9 18:54:02 | 显示全部楼层
用replace()函數
回复

使用道具 举报

1

主题

15

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-1-9 19:27:01 | 显示全部楼层
示例
下例用 xxx 替换 abcdefghi 中的字符串 cde。

SELECT REPLACE('abcdefghicde','cde','xxx')
GO

下面是结果集:

------------
abxxxfghixxx
(1 row(s) affected)

回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-1-9 19:36:01 | 显示全部楼层

declare @str varchar(100)
set @str='|bmbegin|001|bmend|'
select replace(replace(@str, '|bmbegin|', ''), '|bmend|', '')

--result
001

(1 row(s) affected)
回复

使用道具 举报

1

主题

15

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-1-9 19:54:01 | 显示全部楼层
谢谢,还剩下2个
2,如何判断所有审批已经全了
3,如何删除一条审批信息
回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-1-9 20:45:02 | 显示全部楼层
這樣的表結構不好做
回复

使用道具 举报

1

主题

15

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-1-9 21:54:02 | 显示全部楼层
一行的标志已经有了啊,只是把这一行删除,有方法吗
回复

使用道具 举报

1

主题

15

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-1-9 22:09:02 | 显示全部楼层
找到了001,也就找到了001的lineend,再找到linebegin即可,有方法吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表