如何在 SQL 服务器中删除数据库架构和用户
How to drop a DB schema and the user in SQL server
我有一个 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
它的行为就像删除了模式和用户,但它没有做应该做的事情。
我该如何修复此代码?
我使用以下脚本删除了架构和用户:
DROP SCHEMA ITAdmin
DROP USER ITAdmin
然后我执行代码,成功了!这很奇怪,但它起作用了。
我有一个 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
它的行为就像删除了模式和用户,但它没有做应该做的事情。 我该如何修复此代码?
我使用以下脚本删除了架构和用户:
DROP SCHEMA ITAdmin
DROP USER ITAdmin
然后我执行代码,成功了!这很奇怪,但它起作用了。