SQL 服务器 DROP 角色
SQL Server DROP Role
我在 Visual Studio 2013 年的 post 部署脚本中包含以下内容:
-- Drop existing role and create again to be up to date
DROP ROLE payments_data_access_role
GO
CREATE ROLE payments_data_access_role
GO
但是,当我从 VS 发布数据库时,出现角色 'payments_data_access_role' 不存在的错误。
我如何重写这个,以便如果角色存在,删除角色然后重新定义角色?
谢谢。
更新: 我尝试了以下方法并且有效:
IF IS_ROLEMEMBER ('payments_data_access_role') IS NOT NULL
DROP ROLE payments_data_access_role
CREATE ROLE payments_data_access_role
GO
这是正确的做法吗?您能否就此发表您的看法?谢谢。
IS_ROLEMEMBER
就像您正在使用它一样工作。
对于部署,我会将其包装在 try/catch:
BEGIN TRY
PRINT 'Trying to drop role paymens_data_access_role...';
DROP ROLE payments_data_access_role;
Print 'Role payments_data_access_role dropped.';
END TRY
BEGIN CATCH
PRINT 'Role payments_data_access_role does not exist, not dropping...';
END CATCH;
CREATE ROLE payments_data_access_role;
这样您就可以在部署日志中获得反馈并且错误不会停止执行。与使用检查用户是否属于某个角色的函数相比,其意图也更加明显。可能会让您在一段时间后必须返回此代码时或对下一个正在破译您的代码的人来说更容易。
我在 Visual Studio 2013 年的 post 部署脚本中包含以下内容:
-- Drop existing role and create again to be up to date
DROP ROLE payments_data_access_role
GO
CREATE ROLE payments_data_access_role
GO
但是,当我从 VS 发布数据库时,出现角色 'payments_data_access_role' 不存在的错误。
我如何重写这个,以便如果角色存在,删除角色然后重新定义角色?
谢谢。
更新: 我尝试了以下方法并且有效:
IF IS_ROLEMEMBER ('payments_data_access_role') IS NOT NULL
DROP ROLE payments_data_access_role
CREATE ROLE payments_data_access_role
GO
这是正确的做法吗?您能否就此发表您的看法?谢谢。
IS_ROLEMEMBER
就像您正在使用它一样工作。
对于部署,我会将其包装在 try/catch:
BEGIN TRY
PRINT 'Trying to drop role paymens_data_access_role...';
DROP ROLE payments_data_access_role;
Print 'Role payments_data_access_role dropped.';
END TRY
BEGIN CATCH
PRINT 'Role payments_data_access_role does not exist, not dropping...';
END CATCH;
CREATE ROLE payments_data_access_role;
这样您就可以在部署日志中获得反馈并且错误不会停止执行。与使用检查用户是否属于某个角色的函数相比,其意图也更加明显。可能会让您在一段时间后必须返回此代码时或对下一个正在破译您的代码的人来说更容易。