用于查找数据库用户是否拥有架构的通用查询

Jib*_*oor 5 sql sql-server

我们的数据库中有很多DBUsers.我们必须从数据库中清除所有这些用户.当我尝试从DB中删除用户时,由于以下错误而失败

消息15138,级别16,状态1,行2数据库主体拥有数据库中的模式,不能删除.

所以我找到了解决方案,即我将架构的所有权更改为dbo.现在我可以使用下面的脚本删除用户

SELECT name FROM  sys.schemas WHERE principal_id = USER_ID('myUser')
ALTER AUTHORIZATION ON SCHEMA::SchemaName TO dbo 
GO
DROP USER myUser
Run Code Online (Sandbox Code Playgroud)

但是我想放弃一些用户,所以我需要生成通用脚本.我正在使用SQL Server 2008

dat*_*uck 9

这将为您提供针对拥有它们的用户的完整模式列表:

SELECT db.name AS [DB User], s.name AS [Schema]
FROM sys.database_principals db
JOIN sys.schemas s ON s.principal_id = db.principal_id
Run Code Online (Sandbox Code Playgroud)