【问题标题】:How to drop a DB schema and the user in SQL server如何在 SQL Server 中删除数据库架构和用户
【发布时间】:2017-08-02 14:26:48
【问题描述】:

我有一个 sql 代码来删除架构和用户,见下文:

 USE [DB1]
GO
--SELECT * FROM sys.schemas s WHERE s.principal_id = USER_ID('ITAdmin')
WHILE EXISTS (SELECT * FROM sys.schemas s WHERE s.principal_id = USER_ID('ITAdmin'))
BEGIN
    DECLARE @tmpSchemaHolderToBeDroppedOrChanged NVARCHAR(100), @tmpAlterSchemaAuthorisationStatement NVARCHAR(200)
    SET @tmpAlterSchemaAuthorisationStatement = 'DROP SCHEMA '
    SET @tmpSchemaHolderToBeDroppedOrChanged = (SELECT TOP 1 s.name FROM sys.schemas s WHERE s.principal_id = USER_ID('ITAdmin'))
    IF @tmpSchemaHolderToBeDroppedOrChanged = 'ITAdmin'
    BEGIN
            PRINT 'Dropping ITAdmin schema.'
            IF schema_id('ITAdmin') IS NOT NULL
            BEGIN
                    DROP SCHEMA ITAdmin;
                    PRINT 'ITAdmin schema has been dropped.'
            END
    END
    ELSE
    BEGIN
            --Reassign other schemas linked to the ITAdmin user back to themselves.
            SET @tmpAlterSchemaAuthorisationStatement = 'ALTER AUTHORIZATION ON SCHEMA::'

            SET @tmpAlterSchemaAuthorisationStatement = @tmpAlterSchemaAuthorisationStatement + @tmpSchemaHolderToBeDroppedOrChanged + ' TO ' + @tmpSchemaHolderToBeDroppedOrChanged

            PRINT @tmpAlterSchemaAuthorisationStatement
            EXEC sp_executesql  @tmpAlterSchemaAuthorisationStatement
    END
END
GO
if user_id('ITAdmin') is not null
begin
    DROP USER ITAdmin;
end

它的行为就像它已经删除了架构和用户,但它没有做应该做的事情。 如何修复此代码?

【问题讨论】:

  • 你的意思是,运行代码后它没有删除架构和用户?
  • @FerdinandGaspar,没错。它不会同时删除架构和用户

标签: sql-server tsql dynamic-sql


【解决方案1】:

我使用以下脚本删除了架构和用户:

DROP SCHEMA ITAdmin
DROP USER ITAdmin

然后我执行代码,它成功了!这很奇怪,但确实有效。

【讨论】:

    猜你喜欢
    • 2011-01-02
    • 2012-06-08
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2014-04-03
    相关资源
    最近更新 更多