我想将所有者更改为dbo以获取模式列表。对于单个模式,我可以使用:
ALTER AUTHORIZATION ON SCHEMA::SchemaName TO dbo
E.g。我想从每个架构中删除单个用户。要获取他拥有的模式列表,我使用
查询数据库SELECT name FROM sys.schemas WHERE principal_id = USER_ID('db_user')
如何获取我获得的模式名称集,并使用我给您的第一个查询更改这些模式的所有权?
答案 0 :(得分:0)
一种方法是使用光标,如下例所示。
DECLARE
@AlterAuthorizationStatement nvarchar(MAX)
, @SchemaName sysname;
DECLARE SchemaList CURSOR LOCAL FAST_FORWARD FOR
SELECT name
FROM sys.schemas
WHERE principal_id = USER_ID('db_user');
OPEN SchemaList;
WHILE 1 = 1
BEGIN
FETCH NEXT FROM SchemaList INTO @SchemaName;
IF @@FETCH_STATUS = -1 BREAK;
SET @AlterAuthorizationStatement =
N'ALTER AUTHORIZATION ON SCHEMA::' + @SchemaName + N' TO dbo;';
RAISERROR ('Executing %s', 0, 0, @AlterAuthorizationStatement) WITH NOWAIT;
EXEC sp_executesql @AlterAuthorizationStatement;
END;
CLOSE SchemaList;
DEALLOCATE SchemaList;
GO