如何更改架构列表的所有者

时间:2014-06-06 11:59:42

标签: sql-server tsql sql-server-2008-r2

我想将所有者更改为dbo以获取模式列表。对于单个模式,我可以使用:

ALTER AUTHORIZATION ON SCHEMA::SchemaName TO dbo 

E.g。我想从每个架构中删除单个用户。要获取他拥有的模式列表,我使用

查询数据库
SELECT name FROM  sys.schemas WHERE principal_id = USER_ID('db_user')

如何获取我获得的模式名称集,并使用我给您的第一个查询更改这些模式的所有权?

1 个答案:

答案 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
相关问题