用 ~ 分割,每个~分割后代表一个条件,用_ 分割,分割后代表排位顺序(1_2_3_4_5)
第一位代表类别:1指人员(1,2,5) 、2指分部(1,2,4,5)、3 指部门(1,2,4,5)、4指角色(1,2,3,4,5)、,5指所有人1,4,5)、,6指岗位(1,2,4,5)。

对应类别后面()内的数字,代表这个类别需要使用到的 对应顺序位。
第二位代表 对应的编号:如部门编号, 人员编号
第三位 代表 共享级别:0 是部门、1是分部、2是总部 
备注:

当类别为人员时:有第五位(也就是最后一位) 并且 1代表下载,0代表不可下载。
_中的第四位在|@|前面代表安全级别开始,|@|后面代表安全级别 结束。 
当类别为岗位时:第四位中  |@|前面 代表 0 部门,1分部,2 总部  |@|后面 代表 对应的编号( 可以为多个部门或者分部),前面为总部时,后面值为 2。

根据上面的分析再配合案例:

如: 数据库中存储为 1_6_0_0_1~2_3_0_30|@|80_1 ~3_8_0_30|@|80_1~4_35_0_30|@|80_1~4_35_1_30|@|80_1~4_35_2_30|@|80_0~5_0_0_30|@|80_1~6_13_0_0|@|8,7,9_1~6_13_0_1|@|6,7,19_1~6_13_0_2|@|2_1

分解如下:

~1_6_0_0_1 代表 人员ID 为 6 的用户, 有下载权限。
~2_3_0_30|@|80_1  代表分部ID为 3 ,安全级别为 30-80 的人员, 有下载权限。
~3_8_0_30|@|80_1  代表部门ID 为 8,安全级别为 30-80 的人员,有下载权限。
~4_35_0_30|@|80_1  代表角色ID 为 35,共享级别为 部门, 安全级别为 30-80的人员,有下载权限。
~4_35_1_30|@|80_1  代表角色ID 为 35,共享级别为 分部, 安全级别为 30-80的人员,有下载权限。
~4_35_2_30|@|80_0  代表角色ID 为 35,共享级别为 总部, 安全级别为 30-80的人员,无下载权限。
~5_0_0_30|@|80_1  代表所有人中 安全级别为 30-80的人员,有下载权限。
~6_13_0_0|@|8,7,9_1  代表岗位ID为 13,共享级别为部门,同时对应的部门为 8,7,9 编号,有下载权限。
~6_13_0_1|@|6,7,19_1 代表岗位ID为 13,共享级别为分部,同时对应的分部为 6,7,19编号, 有下载权限。
~6_13_0_2|@|2_1  代表岗位ID为 13,共享级别为总部,同时对应的总部编号为 2,有下载权限

基于上面的解析,再通过写一个SQL标量函数来分解这个字段的权限,从而判断传入的用户是否有查看和下载权限。

dbo.GetUserPower(userid,人力资源条件字段)

USE [ecology]
GO
/****** Object:  UserDefinedFunction [dbo].[GetUserPower]    Script Date: 04/11/2023 11:13:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER function [dbo].[GetUserPower](@id varchar(255),@powerlist varchar(4000)) /**id 传入用户ID,powerlist 传入人力资源条件字段值***/
returns varchar(255) as begindeclare @flag varchar(255)declare @data varchar(255)declare @lx varchar(255)declare @bh varchar(255)declare @gxjb varchar(255)declare @aqjb varchar(255)declare @xzqx varchar(255)declare @ks varchar(255)  --|@| 前declare @js varchar(255)  --|@| 后declare @tmp varchar(255) --临时存放declare @userlist table(userid varchar(255),downstatus varchar(255))set @flag='0'/**lx 人力资源条件类型 3 指部门(1,2,4,5)  1指人员 (1,2,5) 2指分部 (1,2,4,5),4指角色(1,2,3,4,5),5指所有人(1,4,5),6指岗位(1,2,4,5)**//**bh 对应类型的ID**/   /**gxjb 共享级别(0 是部门,1是 分部 2是总部)**/  /**aqjb 类型不为6时 代表 安全级别 |@|前面代表安全级别开始,|@|后面代表安全级别 结束,类型为6时,|@|前面代表 共享级别(0 是部门,1是 分部 2是总部),|@|后面代表对应级别的ID**//**xzqx 下载权限 1代表下载,0代表不可下载**/declare @powertable table(data varchar(255),lx varchar(255),bh varchar(255),gxjb varchar(255),aqjb varchar(255),xzqx varchar(255)) insert into @powertable(data,lx,bh,gxjb,aqjb,xzqx) Select Distinct data,dbo.SplitSubString(data,'_',1)as lx,dbo.SplitSubString(data,'_',2)as bh
,dbo.SplitSubString(data,'_',3)as gxjb,dbo.SplitSubString(data,'_',4)as aqjb,dbo.SplitSubString(data,'_',5)as xzqx From SplitStr(@powerlist,'~') Where Len(data)>0DECLARE POWERCURSOR CURSOR FORselect data,lx,bh,gxjb,aqjb,xzqx from @powertableOPEN POWERCURSOR                    --循环取表中数据FETCH FROM POWERCURSOR INTO   @data,@lx,@bh,@gxjb,@aqjb,@xzqxWHILE @@FETCH_STATUS=0BEGIN/**类型为人员(1,2,5)**/IF @lx=1begininsert into @userlist (userid,downstatus) values(@bh,@xzqx) end/**类型为分部(1,2,4,5)**/IF @lx=2BEGINselect @ks=dbo.SplitSubString(@aqjb,'|@|',1),@js=dbo.SplitSubString(@aqjb,'|@|',2)if @ks>@jsbeginset @tmp=@jsset @js=@ksset @ks=@tmpendinsert into @userlist (userid,downstatus) select Distinct id,@xzqx from HrmResource where subcompanyid1=@bh and loginid<>'' and (seclevel>=@ks and seclevel<=@js)END/**类型为部门(1,2,4,5)**/IF @lx=3BEGINselect @ks=dbo.SplitSubString(@aqjb,'|@|',1),@js=dbo.SplitSubString(@aqjb,'|@|',2)if @ks>@jsbeginset @tmp=@jsset @js=@ksset @ks=@tmpendinsert into @userlist (userid,downstatus) select Distinct id,@xzqx from HrmResource where departmentid=@bh and loginid<>'' and (seclevel>=@ks and seclevel<=@js)END    /**类型为角色(1,2,3,4,5)**/IF @lx=4BEGINselect @ks=dbo.SplitSubString(@aqjb,'|@|',1),@js=dbo.SplitSubString(@aqjb,'|@|',2)if @ks>@jsbeginset @tmp=@jsset @js=@ksset @ks=@tmpendinsert into @userlist (userid,downstatus) select Distinct A.id,@xzqx from HrmResource A left join hrmrolemembers B on A.id=resourceid where roleid=@bh and rolelevel=@gxjb and loginid<>'' and (seclevel>=@ks and seclevel<=@js)END        /**类型为所有人(1,4,5)**/IF @lx=5BEGINselect @ks=dbo.SplitSubString(@aqjb,'|@|',1),@js=dbo.SplitSubString(@aqjb,'|@|',2)if @ks>@jsbeginset @tmp=@jsset @js=@ksset @ks=@tmpendinsert into @userlist (userid,downstatus) select Distinct id,@xzqx from HrmResource where loginid<>'' and (seclevel>=@ks and seclevel<=@js)END/**类型为岗位(1,2,4,5) 逻辑还未写好**/IF @lx=6BEGINselect @ks=dbo.SplitSubString(@aqjb,'|@|',1),@js=dbo.SplitSubString(@aqjb,'|@|',2)--  (select data from SplitStr(@powerlist,',')) as zbh  #第5 下面的编号if @ks=0  --部门begininsert into @userlist (userid,downstatus) select Distinct id,@xzqx from (select data from SplitStr(@js,',')) as zbh left join HrmResource on departmentid = data where jobtitle=@bh and loginid<>''endif @ks=1  --分部begininsert into @userlist (userid,downstatus) select Distinct id,@xzqx from (select data from SplitStr(@js,',')) as zbh left join HrmResource on subcompanyid1 = data where jobtitle=@bh and loginid<>''end     if @ks=2  --总部begininsert into @userlist (userid,downstatus) select Distinct id,@xzqx from  HrmResource  where jobtitle=@bh and loginid<>''end    END FETCH NEXT FROM POWERCURSOR INTO@data,@lx,@bh,@gxjb,@aqjb,@xzqx       ENDCLOSE POWERCURSOR Deallocate POWERCURSORdeclare @sl intdeclare @xz intselect distinct @sl=COUNT(userid) from @userlist where userid=@idselect distinct @xz=COUNT(userid) from @userlist where userid=@id and downstatus='1'if @sl>0beginset @flag='1' -- 为1 说明有查看权限   if @xz>0beginset @flag='2' -- 为2 说明有查看和下载权限   end endreturn @flag   --为0说明 无权限end

例如传入 用户ID为 6,及对应的人力资源条件, 返回 1 说明有查看权限,返回 2 说明有查看和下载权限,返回0说明无权限。

select dbo.GetUserPower('6','6_318_0_1|@|6_0~6_62_0_1|@|6_0~6_60_0_1|@|6_0~3_77_0_0|@|100_1')

由于人力资源条件 字段 在ECOLOGY9 的表单建模中是存在缺陷的,做为权限分配字段时,附件类文档只能增加权限,不能删除权限,同时不能控制是否可下载,默认都是可以下载的。 所以需要自己解析出这个字段然后通过DML的方式做存储过程解决,做到与文档权限的同步。具体SQL存储过程如下:

EXECUTE  dbo.LM_ModuleSyncDocSharePermission '传入模块附件字段内容','传入模块共享人员字段内容','模块ID','表单ID','人力资源条件这个共享范围字段ID'

USE [ecology]
GO
/****** Object:  StoredProcedure [dbo].[LM_ModuleSyncDocSharePermission]    Script Date: 04/11/2023 11:31:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[LM_ModuleSyncDocSharePermission] -- Add the parameters for the stored procedure here@fileids varchar(max),  --传入模块附件字段内容@powerlist varchar(4000),  --传入模块共享人员字段内容@modeid varchar(max),  -- 模块ID@billid varchar(max), --表单ID@relatedid varchar(max) --字段ID  人力资源条件这个共享范围字段ID
AS
BEGINif len(@fileids)>0begindeclare @fileidslist table(fileid varchar(max))declare @fileid varchar(max)insert into @fileidslist select data from SplitStr(@fileids,',') where LEN(data)>0DECLARE fileidRCURSOR CURSOR FORselect fileid from @fileidslistOPEN fileidRCURSOR                    --循环取表中数据FETCH FROM fileidRCURSOR INTO   @fileidWHILE @@FETCH_STATUS=0BEGINdeclare @data varchar(255)declare @lx int  --共享类型declare @bh varchar(255) --共享类型对应编号declare @gxjb varchar(255) declare @aqjb varchar(255)declare @xzqx varchar(255)declare @ks varchar(255)  --|@| 前declare @js varchar(255)  --|@| 后--------------获取modeDataShare_XX_set 表中的参数信息---------------------create table #modeDataShare_XX_set ([id] [int]NULL,[sourceid] [int] NULL,[righttype] [int] NULL,[sharetype] [int] NULL,[relatedid] [int] NULL,[rolelevel] [int] NULL,[showlevel] [int] NULL,[isdefault] [int] NULL,[layoutid] [int] NULL,[layoutid1] [int] NULL,[layoutorder] [int] NULL,[isrolelimited] [int] NULL,[rolefieldtype] [int] NULL,[rolefield] [int] NULL,[higherlevel] [int] NULL,[rightid] [int] NULL,[requestid] [int] NULL,[showlevel2] [int] NULL,[hrmCompanyVirtualType] [int] NULL,[orgrelation] [int] NULL,[joblevel] [int] NULL,[jobleveltext] [varchar](4000) NULL,[browsersharetype] [int] NULL,)declare @ParmDefinition NVARCHAR(max)declare @tablename Nvarchar(100)declare @sql NVARCHAR(max)declare @sharetype varchar(100)set @sharetype = '1000'set @ParmDefinition= N'@billid varchar(max),@relatedid varchar(max),@sharetype varchar(100)'  set @tablename = 'modeDataShare_'+@modeid+'_set';set @sql = N'select * from '+@tablename+' where sourceid=@billid and relatedid=@relatedid and sharetype =@sharetype ';--  exec SP_EXECUTESQL @sql,@ParmDefinition,@billid=@billid,@relatedid=@relatedid,@sharetype=@sharetype;insert into #modeDataShare_XX_set exec SP_EXECUTESQL @sql,@ParmDefinition,@billid=@billid,@relatedid=@relatedid,@sharetype=@sharetype;---------------------------------------------    /**lx 人力资源条件类型 3 指部门(1,2,4,5)  1指人员 (1,2,5) 2指分部 (1,2,4,5),4指角色(1,2,3,4,5),5指所有人(1,4,5),6指岗位(1,2,4,5)**//**bh 对应类型的ID**/   /**gxjb 共享级别(0 是部门,1是 分部 2是总部)**/  /**aqjb 类型不为6时 代表 安全级别 |@|前面代表安全级别开始,|@|后面代表安全级别 结束,类型为6时,|@|前面代表 共享级别(0 是部门,1是 分部 2是总部),|@|后面代表对应级别的ID**//**xzqx 下载权限 1代表下载,0代表不可下载**/declare @powertable table(data varchar(255),lx varchar(255),bh varchar(255),gxjb varchar(255),aqjb varchar(255),xzqx varchar(255)) --存放共享用户权限拆分结果create table #filelist (fileid varchar(255),sharetype int,content int,seclevel int,sharelevel int,srcfrom int,downloadlevel int,seclevelmax char(10),joblevel char(10),jobdepartment char(10),jobsubcompany char(10),userid int,subcompanyid int,departmentid int,roleid int,jobids char(10),rolelevel tinyint,modedatashareseclevel int,modedatasharejoblevel int,jobleveltext varchar(4000))  --临时存放拆分后组成的DOC权限结果insert into @powertable(data,lx,bh,gxjb,aqjb,xzqx) Select Distinct data,dbo.SplitSubString(data,'_',1)as lx,dbo.SplitSubString(data,'_',2)as bh,dbo.SplitSubString(data,'_',3)as gxjb,dbo.SplitSubString(data,'_',4)as aqjb,dbo.SplitSubString(data,'_',5)as xzqx From SplitStr(@powerlist,'~') Where Len(data)>0DECLARE POWERCURSOR CURSOR FORselect data,lx,bh,gxjb,aqjb,xzqx from @powertableOPEN POWERCURSOR                    --循环取表中数据FETCH FROM POWERCURSOR INTO   @data,@lx,@bh,@gxjb,@aqjb,@xzqxWHILE @@FETCH_STATUS=0BEGIN/**类型为人员(1,2,5)**/IF @lx=1begininsert into #filelist (fileid,sharetype,content,seclevel,sharelevel,srcfrom,downloadlevel,seclevelmax,joblevel,jobdepartment,jobsubcompany,userid,subcompanyid,departmentid,roleid,jobids,rolelevel,modedatashareseclevel,modedatasharejoblevel,jobleveltext) values(@fileid,@lx,@bh,0,1,@lx,@xzqx,255,-1,0,0,@bh,0,0,0,0,0,-999999,null,null)  end/**类型为分部(1,2,4,5)**/IF @lx=2BEGINselect @ks=dbo.SplitSubString(@aqjb,'|@|',1),@js=dbo.SplitSubString(@aqjb,'|@|',2)insert into #filelist (fileid,sharetype,content,seclevel,sharelevel,srcfrom,downloadlevel,seclevelmax,joblevel,jobdepartment,jobsubcompany,userid,subcompanyid,departmentid,roleid,jobids,rolelevel,modedatashareseclevel,modedatasharejoblevel,jobleveltext) values(@fileid,@lx,@bh,@ks,1,@lx,@xzqx,@js,-1,0,0,0,@bh,0,0,0,0,@ks,null,null)    END/**类型为部门(1,2,4,5)**/IF @lx=3BEGINselect @ks=dbo.SplitSubString(@aqjb,'|@|',1),@js=dbo.SplitSubString(@aqjb,'|@|',2)insert into #filelist (fileid,sharetype,content,seclevel,sharelevel,srcfrom,downloadlevel,seclevelmax,joblevel,jobdepartment,jobsubcompany,userid,subcompanyid,departmentid,roleid,jobids,rolelevel,modedatashareseclevel,modedatasharejoblevel,jobleveltext) values(@fileid,@lx,@bh,@ks,1,@lx,@xzqx,@js,-1,0,0,0,0,@bh,0,0,0,@ks,null,null)    END /**类型为角色(1,2,3,4,5)**/IF @lx=4BEGINselect @ks=dbo.SplitSubString(@aqjb,'|@|',1),@js=dbo.SplitSubString(@aqjb,'|@|',2)if @gxjb =0begininsert into #filelist (fileid,sharetype,content,seclevel,sharelevel,srcfrom,downloadlevel,seclevelmax,joblevel,jobdepartment,jobsubcompany,userid,subcompanyid,departmentid,roleid,jobids,rolelevel,modedatashareseclevel,modedatasharejoblevel,jobleveltext) values(@fileid,@lx,@bh+'0',@ks,1,@lx,@xzqx,@js,-1,0,0,0,0,0,@bh,0,@gxjb,@ks,null,null)insert into #filelist (fileid,sharetype,content,seclevel,sharelevel,srcfrom,downloadlevel,seclevelmax,joblevel,jobdepartment,jobsubcompany,userid,subcompanyid,departmentid,roleid,jobids,rolelevel,modedatashareseclevel,modedatasharejoblevel,jobleveltext) values(@fileid,@lx,@bh+'1',@ks,1,@lx,@xzqx,@js,-1,0,0,0,0,0,@bh,0,@gxjb,@ks,null,null)insert into #filelist (fileid,sharetype,content,seclevel,sharelevel,srcfrom,downloadlevel,seclevelmax,joblevel,jobdepartment,jobsubcompany,userid,subcompanyid,departmentid,roleid,jobids,rolelevel,modedatashareseclevel,modedatasharejoblevel,jobleveltext) values(@fileid,@lx,@bh+'2',@ks,1,@lx,@xzqx,@js,-1,0,0,0,0,0,@bh,0,@gxjb,@ks,null,null)endif @gxjb =1begininsert into #filelist (fileid,sharetype,content,seclevel,sharelevel,srcfrom,downloadlevel,seclevelmax,joblevel,jobdepartment,jobsubcompany,userid,subcompanyid,departmentid,roleid,jobids,rolelevel,modedatashareseclevel,modedatasharejoblevel,jobleveltext) values(@fileid,@lx,@bh+'1',@ks,1,@lx,@xzqx,@js,-1,0,0,0,0,0,@bh,0,@gxjb,@ks,null,null)insert into #filelist (fileid,sharetype,content,seclevel,sharelevel,srcfrom,downloadlevel,seclevelmax,joblevel,jobdepartment,jobsubcompany,userid,subcompanyid,departmentid,roleid,jobids,rolelevel,modedatashareseclevel,modedatasharejoblevel,jobleveltext) values(@fileid,@lx,@bh+'2',@ks,1,@lx,@xzqx,@js,-1,0,0,0,0,0,@bh,0,@gxjb,@ks,null,null)end if @gxjb =2begininsert into #filelist (fileid,sharetype,content,seclevel,sharelevel,srcfrom,downloadlevel,seclevelmax,joblevel,jobdepartment,jobsubcompany,userid,subcompanyid,departmentid,roleid,jobids,rolelevel,modedatashareseclevel,modedatasharejoblevel,jobleveltext) values(@fileid,@lx,@bh+'2',@ks,1,@lx,@xzqx,@js,-1,0,0,0,0,0,@bh,0,@gxjb,@ks,null,null)       end      END     /**类型为所有人(1,4,5)**/IF @lx=5BEGINselect @ks=dbo.SplitSubString(@aqjb,'|@|',1),@js=dbo.SplitSubString(@aqjb,'|@|',2)insert into #filelist (fileid,sharetype,content,seclevel,sharelevel,srcfrom,downloadlevel,seclevelmax,joblevel,jobdepartment,jobsubcompany,userid,subcompanyid,departmentid,roleid,jobids,rolelevel,modedatashareseclevel,modedatasharejoblevel,jobleveltext) values(@fileid,@lx,1,@ks,1,@lx,@xzqx,@js,-1,0,0,0,0,0,0,0,0,@ks,null,null)END/**类型为岗位(1,2,4,5)**/IF @lx=6BEGINselect @ks=dbo.SplitSubString(@aqjb,'|@|',1),@js=dbo.SplitSubString(@aqjb,'|@|',2)--  (select data from SplitStr(@powerlist,',')) as zbh  #第5 下面的编号if @ks=0  --部门begininsert into #filelist (fileid,sharetype,content,seclevel,sharelevel,srcfrom,downloadlevel,seclevelmax,joblevel,jobdepartment,jobsubcompany,userid,subcompanyid,departmentid,roleid,jobids,rolelevel,modedatashareseclevel,modedatasharejoblevel,jobleveltext) select distinct @fileid,33,@bh,-999999,1,10,@xzqx,255,3,data,0,0,0,0,0,@bh,0,-999999,0,data from SplitStr(@js,',')endif @ks=1  --分部begininsert into #filelist (fileid,sharetype,content,seclevel,sharelevel,srcfrom,downloadlevel,seclevelmax,joblevel,jobdepartment,jobsubcompany,userid,subcompanyid,departmentid,roleid,jobids,rolelevel,modedatashareseclevel,modedatasharejoblevel,jobleveltext) select distinct @fileid,32,@bh,-999999,1,10,@xzqx,255,2,0,data,0,0,0,0,@bh,0,-999999,1,data from SplitStr(@js,',')end        if @ks=2  --总部begininsert into #filelist (fileid,sharetype,content,seclevel,sharelevel,srcfrom,downloadlevel,seclevelmax,joblevel,jobdepartment,jobsubcompany,userid,subcompanyid,departmentid,roleid,jobids,rolelevel,modedatashareseclevel,modedatasharejoblevel,jobleveltext) values(@fileid,11,@bh,0,1,10,@xzqx,255,1,0,0,0,0,0,0,0,0,-999999,2,null)end   END FETCH NEXT FROM POWERCURSOR INTO@data,@lx,@bh,@gxjb,@aqjb,@xzqx       ENDCLOSE POWERCURSOR Deallocate POWERCURSOR---------------------modedatashare_xx 表先清空再添加---------------CREATE TABLE #modeDataShare_XX([sourceid] [int] NULL,[type] [int] NULL,[content] [int] NULL,[seclevel] [int] NULL,[sharelevel] [int] NULL,[srcfrom] [int] NULL,[opuser] [int] NULL,[isDefault] [int] NULL,[layoutid] [int] NULL,[layoutid1] [int] NULL,[layoutorder] [int] NULL,[sharesetid] [int] NULL,[higherlevel] [int] NULL,[setid] [int] NULL,[rightid] [int] NULL,[requestid] [int] NULL,[showlevel2] [int] NULL,[joblevel] [int] NULL,[jobleveltext] [varchar](4000) NULL,[browsersharetype] [int] NULL)declare @setid varchar(100)declare @isdefault varchar(100)declare @layoutid varchar(100)declare @layoutida varchar(100)declare @layoutorder varchar(100)declare @higherlevel varchar(100)declare @rightid varchar(100)select * from #modeDataShare_XX_setselect top 1 @setid=id,@isdefault=isdefault,@layoutid=layoutid,@layoutida=layoutid1,@layoutorder=layoutorder,@higherlevel=higherlevel,@rightid=rightid from #modeDataShare_XX_set  insert into #modeDataShare_XX select @billid,sharetype,content,modedatashareseclevel,sharelevel,1000,@relatedid,@isdefault,@layoutid,@layoutida,@layoutorder,null,@higherlevel,@setid,@rightid,null,(case when seclevelmax=255 then null else seclevelmax end),modedatasharejoblevel,jobleveltext,null from #filelist AS Aset @tablename = 'modeDataShare_'+@modeid; set @sql = 'delete '+@tablename+' where sourceid= '+@billid+' and srcfrom=1000 and opuser='+@relatedid+''exec SP_EXECUTESQL @sqlset @sql = 'insert into '+@tablename+ ' select * from #modeDataShare_XX'exec SP_EXECUTESQL @sql---------------------------------------------------------------------------------------------先删除DOCSHARE 原数据,再添加共享数据--------------------delete DocShare where id not in (select A.id from DocShare A left join moderightinfo B on A.sharetype=B.sharetype and A.seclevel=B.showlevel and  relatedid = (A.userid+A.departmentid+A.subcompanyid+A.roleid+A.jobids) and A.rolelevel=B.rolelevel and righttype<>0 WHERE docid=@fileid and modeid=@modeid) and docid=@fileidinsert into DocShareselect b,srcfrom,seclevel,rolelevel,sharelevel,userid,subcompanyid,departmentid,roleid,c,d,e,f,g,downloadlevel,h,i,j,seclevelmax,k,jobdepartment,jobsubcompany,jobids,l from(select distinct (case when modedatasharejoblevel IS null then 0 else modedatasharejoblevel end)as a, @fileid as b,srcfrom,seclevel,rolelevel,sharelevel,userid,subcompanyid,departmentid,roleid,0 as c,0 as d,@billid as e,null as f,0 as g,downloadlevel,null as h,null as i,null as j,seclevelmax,(case when srcfrom = 10 then joblevel else 0 end) as k,jobdepartment,jobsubcompany,jobids,null as lfrom #filelist) KKwhere a<> '2'--------------------------------------------------------------------------------------------------------------------------先删除shareinnerdoc原数据,再添加共享数据------------------declare @sec_category varchar(100)declare @doc_createdate char(10)select top 1 @sec_category=sec_category,@doc_createdate=doc_createdate from shareinnerdoc where sourceid = @fileiddelete shareinnerdoc where id not in (select A.id from shareinnerdoc A left join moderightinfo B on A.type=B.sharetype and A.seclevel=B.showlevel and  relatedid = content and righttype<>0 WHERE sourceid=@fileid and modeid=@modeidunion allselect id from shareinnerdoc where srcfrom>='80' and sourceid=@fileid) and sourceid=@fileidinsert into shareinnerdoc   select b,sharetype,content,seclevel,sharelevel,srcfrom,c,d,downloadlevel,seclevelmax,joblevel,jobdepartment,jobsubcompany,e,f from(select distinct (case when sharetype=4 and RIGHT(content,1)=0 then 1 else 0 end)as a, @fileid as b,sharetype,content,seclevel,sharelevel,srcfrom,1 as c,0 as d,downloadlevel,seclevelmax,joblevel,jobdepartment,jobsubcompany,@sec_category as e,@doc_createdate as ffrom #filelist) KKwhere a<>'1'-------------------------------------------------------------------------------------------DROP TABLE #modeDataShare_XX_setDROP TABLE #modeDataShare_XXDROP TABLE #filelistFETCH NEXT FROM fileidRCURSOR INTO@fileid ENDCLOSE fileidRCURSOR Deallocate fileidRCURSOR end
END

ECOLOGY9人力资源条件 字段数据库存储结构分析相关推荐

  1. mysql单价乘以数量_数据库字段中存储的数据数量乘以不同单价的和的算法示例...

    数据库字段中存储的数据数量乘以不同单价的和的算法,适用于记账本程序的计件数据记录,和商品记录等场景. 代码示例如下: //模拟数据库结果集 $arr = array( array( "id& ...

  2. 06_MySQL笔记-数据类型-字段属性-存储引擎-字符集-创建新表-数据库建模

    文章目录 数据类型 字段属性 存储引擎 字符集 创建新表 数据库建模 PowerDesigner 建模工具 个人博客 https://blog.csdn.net/cPen_web 数据类型 数据类型 ...

  3. 使用嵌入式关系型SQLite数据库存储数据

    除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NUL ...

  4. MySQL—05—MySQL如何处理SQL语句;MySQL数据库存储引擎介绍;

    一. MySQL 中的执行计划 1 MySQL 执行计划 在 MySQL 中可以通过 explain 关键字模拟优化器,执行 SQL 语句,从而知道 MySQL 是 如何处理 SQL 语句的. 2 M ...

  5. Realm数据库存储 使用详解

    文章目录 一 Realm 框架 概念介绍 开发辅助工具 二 Realm 使用教程 1 简单的数据操作 创建数据模型 使用RLMRealm对象保存指定模型 使用RLMRealm对象 更新指定模型 使用R ...

  6. 【转】Android使用嵌入式关系型SQLite数据库存储数据【学习记录】

    为什么80%的码农都做不了架构师?>>>    除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成 ...

  7. 数据库存储模型-数据存储

    按照存储模型来说分为以下4类. 键值存储 列式存储 文档存储 图形存储 键值模型 键值数据模型的主要思想来自于哈希表:在哈希表中有一个特定的key和一个value指针,指向特定的数据.键值模型对于海量 ...

  8. MySQL 数据库存储引擎

    目录 一.存储引擎简介 二.MyISAM存储引擎 1.MylSAM介绍 2.MyISAM表支持3种不同的存储格式 3.MylSAM的特点 4.MyISAM使用的生产场景 三.InnoDB存储引擎 1. ...

  9. MYSQL数据库--存储引擎

    前言 数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建.查询.更新和删除数据操作.简而言之,存储引擎就是指表的类型.数据库的存储引擎决定了表在计算机中的存储方式.不同的存储引擎提 ...

最新文章

  1. layuiadmin上手好难_新手自学板绘先学SAI还是PS好?零基础绘画入门需知!
  2. 【算法】一个简单的ISODATA原理
  3. unity android 符号表,记录腾讯bugly关于符号表的配置
  4. OpenSSF 获1000万美元投资,提升开源软件和软件供应链安全
  5. NVIDIA NSight System工具安装和使用介绍(MacOS)
  6. php openssl 处理pkcs8,【转载】OpenSSL命令---pkcs8
  7. 《时代》评出50个最酷网站
  8. 电影《中国合伙人》中的管理知识
  9. 如何切换到root用户
  10. CC00070.bigdatajava——|Java循环结构.V09|——|Java.v09|双重for循环.v02|打印各种星星图案|
  11. Mac系统升级,降级PHP出现的问题解决办法
  12. 考试行测常识判断法律知识备考误区提示
  13. 敏捷开发绩效管理之九:阿米巴经营之软件团队经营什么(上)
  14. 国仁老猫:抖音影视剪辑5种赚钱方法、18个素材网站、8.0剪辑方法防判搬运(建议收藏)
  15. 使用Trove的integration定制化trove镜像
  16. 虚拟机容器嵌合体—— Kata Containers正式走出实验室
  17. linux下,批量复制文件名带空格的文件
  18. 数字内容市场水量上涨,阜博集团能否成为“鲶鱼”?
  19. [P2600][ZJOI2008]瞭望塔(半平面交)
  20. 【51单片机】直流电机的驱动和PWM调速

热门文章

  1. MongoDB启动闪退问题完美解决
  2. Qt模仿VS停靠窗口(一)
  3. QT tabWidget样式表
  4. OpenSSL安装教程
  5. C++:setw及setfill
  6. 零基础怎么学画画?像素画和绘画的本质
  7. Express解决跨域问题
  8. 【分享】关于星图地球数据云的地图质量,看看大家怎么说
  9. 移动端H5页面 横、竖屏
  10. 浪淘沙第八首·刘禹锡