SQL Procedure示例程序03

本文介绍了一种通过SQL存储过程实现批量为客户提供区域权限分配的方法,包括获取客户所属区域、查找具有相应区域权限的用户并为其分配权限的过程。


ALTER PROCEDURE [dbo].[AssignAreaRightToUsers] 
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	DECLARE @CustomerID                     varchar(50)

	DECLARE CustCurosr CURSOR FOR
		SELECT OID FROM tbl_customdata WHERE newflag=0

	OPEN CustCurosr
	FETCH NEXT FROM CustCurosr
		INTO @CustomerID
	WHILE @@FETCH_STATUS = 0
	BEGIN		
		exec [AssignAreaRightToUsersByOID] @CustomerID
		FETCH NEXT FROM CustCurosr
				INTO @CustomerID
	END	

	CLOSE CustCurosr
	DEALLOCATE CustCurosr	

END


ALTER PROCEDURE [dbo].[AssignAreaRightToUsersByOID] 
	@OID                    varchar(40)
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	DECLARE @AreaID                        varchar(50)
	DECLARE @RAOID                         varchar(50)
	DECLARE @RIGHTEEOID                    varchar(50)   --用户ID

	--获取客户所属区域
	select @AreaID=tbl_saleorg_oid from tbl_customdata where oid =@OID
	PRINT '@AreaID=' + @AreaID

	--根据区域找到有该区域权限的的用户
	DECLARE MyCurosr CURSOR FOR
	SELECT DISTINCT OID,RIGHTEEOID FROM TBL_RIGHTACTION 
	WHERE OID
		IN(
			SELECT a.RAOID FROM TBLAREARIGHTS A, TBL_SALEORG B WHERE A.TBL_SALEORG_OID = B.OID 
			AND b.oid =@AreaID
			AND B.SOG_STATUS = 'USAGE' 
		)

	OPEN MyCurosr
	FETCH NEXT FROM MyCurosr
		INTO @RAOID,@RIGHTEEOID
	--给这些用户赋拥有这个客户的权限
	BEGIN TRY	
		BEGIN TRANSACTION 
		
		--先删除该客户对应的区域权限
		DELETE FROM TBLAREARIGHTS WHERE TBL_SALEORG_OID=lower(@OID) 

		WHILE @@FETCH_STATUS = 0
		BEGIN		
			PRINT '@RAOID=' + @RAOID
			PRINT '@RIGHTEEOID=' + @RIGHTEEOID		
			
			INSERT INTO TBLAREARIGHTS (TBL_SALEORG_OID,RAOID,ARS_RIGHTS) VALUES(lower(@OID),@RAOID,'Browse| | |')

			FETCH NEXT FROM MyCurosr
					INTO @RAOID,@RIGHTEEOID
		END
		UPDATE tbl_customdata SET newflag=1 WHERE oid = @OID		
		COMMIT TRANSACTION 
	END TRY
	BEGIN CATCH
		ROLLBACK TRANSACTION 	
	END CATCH

	CLOSE MyCurosr
	DEALLOCATE MyCurosr	

END




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值