如何确定SQL Server中是否存在数据库角色?

Jon*_*ger 46 sql sql-server

我试图找出如何检查SQL Server中是否存在数据库角色.我想做这样的事情:

if not exists (select 1 from sometable where rolename='role')
begin
CREATE ROLE role
    AUTHORIZATION MyUser;
end
Run Code Online (Sandbox Code Playgroud)

我应该在这里使用什么表/ proc?

gbn*_*gbn 71

SELECT DATABASE_PRINCIPAL_ID('role')
--or
IF DATABASE_PRINCIPAL_ID('role') IS NULL
Run Code Online (Sandbox Code Playgroud)

USER_ID已弃用,可能会中断.CREATE ROLE表示SQL 2005+所以没关系

  • @Klaus:尝试创建一个同名的角色+用户。它会失败。https://msdn.microsoft.com/en-us/library/ms187328.aspx“名称”列是唯一的 (2认同)

G M*_*ros 25

if not exists (select 1 from sys.database_principals where name='role' and Type = 'R')
begin
CREATE ROLE role
    AUTHORIZATION MyUser;
end
Run Code Online (Sandbox Code Playgroud)

  • 如果您的用户恰好具有相同的"角色"名称,则会失败.奇怪,但你必须删除"='R'"才能100%工作 (3认同)
  • @ Gucu112,前1个不是必需的,实际上可能会减慢查询速度(尽管很少)。 (2认同)