目前我有三個存儲過程改變位SQL Server過程:上if語句
- 第一個將插入一個
userId
和roleId
- 第二個將刪除目標
userId
和roleId
- 三是應該更改列的位值的更新
isShopper
userId
是唯一的,但可以有多個角色。角色是「客戶」,「購物者」和「管理員」。當我插入「購物者」角色時,isShopper
列的位值爲1,這是我想要的。
但是,當我從用戶中刪除「購物者」的角色時,位值保持爲1.我很好奇,當購物者角色被移除時,我會如何將購物者的位值更改回0。
插入過程:
ALTER proc [dbo].[Asp_Net_User_Role_Insert]
@UserId nvarchar (128),
@RoleId nvarchar (128)
AS
BEGIN
INSERT INTO [dbo].[AspNetUserRoles] ([UserId], [RoleId])
SELECT
@UserId, @RoleId
WHERE
NOT EXISTS(SELECT UserId, RoleId
FROM AspNetUserRoles
WHERE RoleId = @RoleId
AND UserId = @UserId)
EXECUTE dbo.ProfileAccountInfos_Shopper_Update
@UserId, @RoleId
END
刪除程序:
ALTER proc [dbo].[Asp_Net_User_Role_Delete]
@UserId nvarchar (128),
@RoleId nvarchar (128)
AS
BEGIN
DELETE FROM [dbo].[AspNetUserRoles]
WHERE RoleId = @RoleId
AND UserId = @UserId
EXECUTE dbo.ProfileAccountInfos_Shopper_Update
@UserId, @RoleId
END
更新程序(標記在插入的結束和刪除)
ALTER proc dbo.ProfileAccountInfos_Shopper_Update
@IsShopper bit,
@UserId nvarchar (128),
@RoleId nvarchar(128)
AS
BEGIN
IF (@RoleId = '91e67659-0dcb-4171-bc76-78d18b1d1336')
AND @IsShopper = 0
BEGIN
UPDATE [dbo].[ProfileAccountInfos]
SET [DateModified] = getutcdate(),
[IsShopper] = 1
WHERE UserId = @UserId
END
END
當使用你的答案我成功插入一個新的角色ID和用戶ID;然而,當我在列上使用delete proc時,'isShopping'不會返回到0. – Michael
好吧..知道了......我錯過了刪除角色時使其成爲0的部分。我認爲在這種情況下,應該在插入和刪除存儲過程中決定IsShopper的值,並傳遞給更新存儲過程。更新的存儲過程不需要'@ RoleId'和If塊。它會有'@ IsShopper'參數。我會盡快更新我的答案。 –