2014-06-06 3 views
0

스키마 목록의 소유자를 dbo로 변경하려고합니다. 단일 스키마의 경우 다음과 같이이 작업을 수행 할 수 있습니다.스키마 목록의 소유자를 변경하는 방법

ALTER AUTHORIZATION ON SCHEMA::SchemaName TO dbo 

예 : 모든 스키마에서 단일 사용자를 사용하지 못하게하고 싶습니다. 그는 내가 내가 얻을 내가 준 첫 번째 쿼리 이러한 스키마의 소유권을 변경 스키마 이름의 집합을 취할 수있는 방법

SELECT name FROM sys.schemas WHERE principal_id = USER_ID('db_user') 

와 데이터베이스를 쿼리 소유 스키마의 목록을 얻으려면?

+0

내가 작성한 쿼리를 기반으로 한 동적 SQL이라고 생각합니다. 아니면 더 많은 네이티브 솔루션을 찾고 있습니까? – xacinay

+0

네이티브 솔루션이있을 수 있지만 @DanGuzman과 같은 동적 솔루션이 좋다고 생각했습니다. – user3714886

답변

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 
관련 문제