【问题标题】:How do you test for the existence of a user in SQL Server?如何在 SQL Server 中测试用户是否存在?
【发布时间】:2010-09-26 05:46:48
【问题描述】:

我想在 SQL Server 脚本中删除用户,但我需要先测试是否存在,否则我会收到脚本错误。删除表或存储过程时,我会像这样检查 sysobjects 表:

IF EXISTS (
    SELECT * 
    FROM   sysobjects 
    WHERE  id = object_id(N'[dbo].[up_SetMedOptions]') 
    AND    OBJECTPROPERTY(id, N'IsProcedure') = 1
)
Drop Procedure up_SetMedOptions;
GO

检查用户的必然结果是什么?请注意,我不是在询问服务器的数据库登录!该问题与特定数据库中的用户有关。

【问题讨论】:

    标签: sql-server sql-server-2008 sql-server-2005 sql-server-2012


    【解决方案1】:

    下面的代码对我有用。

    IF EXISTS (SELECT * FROM sys.syslogins WHERE name = N'MyUserName') 
    DROP LOGIN [MyUserName]
    

    【讨论】:

    • 该问题明确表示“我询问数据库登录到服务器”。您的解决方案将删除 login 并留下孤立的数据库 user
    【解决方案2】:

    在 SQL 2005 中:

    select * from sys.sysusers
    

    在 SQL 2000 中:

    select * from sysusers
    

    【讨论】:

      【解决方案3】:

      SSMS 以下列方式编写脚本:

      对于 SQL 2005/2008:

      IF  EXISTS (SELECT * FROM sys.database_principals WHERE name = N'username')
      DROP USER [username]
      

      对于 SQL 2000:

      IF  EXISTS (SELECT * FROM dbo.sysusers WHERE name = N'username')
      EXEC dbo.sp_revokedbaccess N'username'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-15
        • 2012-04-16
        • 1970-01-01
        • 2010-09-18
        • 1970-01-01
        • 1970-01-01
        • 2012-12-13
        相关资源
        最近更新 更多