【问题标题】:How do I determine if a database role exists in SQL Server?如何确定 SQL Server 中是否存在数据库角色?
【发布时间】:2010-11-15 03:05:24
【问题描述】:

我试图弄清楚如何检查 SQL Server 中是否存在数据库角色。我想做这样的事情:

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

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

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:
    SELECT DATABASE_PRINCIPAL_ID('role')
    --or
    IF DATABASE_PRINCIPAL_ID('role') IS NULL
    

    USER_ID 已弃用,可能会损坏。 CREATE ROLE 表示 SQL 2005+ 所以没问题

    【讨论】:

    【解决方案2】:
    if not exists (select 1 from sys.database_principals where name='role' and Type = 'R')
    begin
    CREATE ROLE role
        AUTHORIZATION MyUser;
    end
    

    【讨论】:

    • 如果您的用户碰巧具有相同的“角色”名称,则会失败。奇怪,但您必须删除“= 'R'”才能 100% 工作
    • @Klaus 这与我有什么关系?
    • 条件开头不应该有(select top 1 from...吗?
    • @Gucu112,top 1 不是必需的,实际上可能会减慢查询速度(尽管很少)。
    • 对不起,我的错。事实上,我已经仔细检查过,这取决于您想要实现的目标。如果作者提到的情况,只选择 1 作为值就足够了。
    猜你喜欢
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 2011-01-12
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    相关资源
    最近更新 更多