1
シナリオ私は、ユーザーが他のユーザーに役割を割り当てるときから取得していますこのDataTableを持って挿入レコード
:
を上記の表では、ユーザーmushtaqに新しい役割を割り当て、以下の手順でデータベースに挿入します。以下は
ALTER PROCEDURE [dbo].[SP_ROLE_ASSIGNMENT_ASSIGN_ROLES_TO_USER]
@RoleAssignmentDT _ROLEASSIGNMENTSCHEMA ReadOnly
AS
BEGIN TRY
BEGIN TRANSACTION
IF EXISTS (SELECT Role_ID
FROM Role_Assignment RA
INNER JOIN @RoleAssignmentDT t ON t._Role_ID = Ra.Role_ID
AND RA.Username = t._Username)
BEGIN
UPDATE Role_Assignment
SET Role_Assign = 0,
Modified_By_ID = t._Modified_By_ID,
Modified_Date = GETDATE()
FROM @RoleAssignmentDT t
WHERE Role_Assignment.Role_ID <> t._Role_ID
AND Role_Assignment.Username = t._Username
AND (t._Role_Assign = 1 AND Role_Assignment.Role_Assign = 1)
UPDATE Role_Assignment
SET Role_Assign = t._Role_Assign,
Modified_By_ID = t._Modified_By_ID,
Modified_Date = GETDATE()
FROM @RoleAssignmentDT t
WHERE Role_Assignment.Role_ID = t._Role_ID
AND Role_Assignment.Username = t._Username
END
ELSE
BEGIN
INSERT INTO Role_Assignment (Role_ID, Username, Role_Assign, Prepared_By_ID, Prepared_Date)
SELECT
t._Role_ID, t._Username, t._Role_Assign, t._Prepared_By_ID, GETDATE()
FROM
@RoleAssignmentDT t
END
COMMIT TRAN -- Transaction Success!
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRAN --RollBack in case of Error
-- you can Raise ERROR with RAISEERROR() Statement including the details of the exception
--RAISERROR('No Record Inserted, Contact to administrator',16,1)
DECLARE @Msg NVARCHAR(MAX)
SELECT @Msg=ERROR_MESSAGE()
RAISERROR('Error Occured: %s', 20, 101,@msg) WITH LOG
END CATCH
私は手続き上の他のユーザに新しい役割を割り当てる場合にのみ、ユーザーahmer
を更新し、私のSQL Role_Assignment
テーブルのスキーマ今
です。私のプロシージャがデータテーブルを取得すると、IF
条件が実行され、ユーザahmer
が見つかり、それを更新します。私はチェックして、SQL ServerテーブルRole_Assignment
に存在するユーザーのみを更新するストアドプロシージャをしたい
を欲しい
。存在しない場合は、最初に挿入します。
私は現在の問題について簡単な情報を提供していると思います。私のストア手順で何を修正する必要があるのかを教えてください。最初に気象ユーザーが存在するかどうかを確認してください。前に存在しなかった人はそれを挿入し、存在する他の人を更新します。