다음을 통해 공유


ALTER SCHEMA(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System(PDW)Microsoft Fabric의 SQL 분석 엔드포인트Microsoft Fabric의 웨어하우스

스키마 간에 보안 개체를 이동합니다.

Transact-SQL 구문 표기 규칙

구문

-- Syntax for SQL Server and Azure SQL Database  

ALTER SCHEMA schema_name   
   TRANSFER [ <entity_type> :: ] securable_name   
[;]  

<entity_type> ::=  
    {  
    Object | Type | XML Schema Collection  
    }  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric

ALTER SCHEMA schema_name   
   TRANSFER [ OBJECT :: ] securable_name   
[;]  

인수

schema_name

현재 데이터베이스의 대상 스키마입니다. 보안 개체가 이 스키마로 이동됩니다. 사용할 수 없거나 SYSINFORMATION_SCHEMA

<entity_type>

소유자가 변경되는 엔터티의 클래스입니다. Object가 기본값입니다.

securable_name

스키마로 이동할 스키마 범위 보안 개체의 한 부분 또는 두 부분으로 구성된 이름입니다.

설명

사용자와 스키마는 완전히 분리됩니다. 스키마는 데이터베이스 사용자와 동일하지 않습니다. 시스템 카탈로그 뷰를 사용하여 데이터베이스 사용자와 스키마 간의 차이점을 식별합니다.

ALTER SCHEMA는 같은 데이터베이스에서 스키마 간에 보안 개체를 이동할 때만 사용할 수 있습니다. 스키마 내에서 보안 개체를 변경하거나 삭제하려면 해당 보안 개체와 관련된 ALTER 또는 DROP 문을 사용합니다.

한 부분으로 구성된 이름이 securable_name에 사용되면 현재 적용 중인 이름 확인 규칙이 보안 개체를 찾는 데 사용됩니다.

보안 개체와 연결된 모든 권한은 보안 개체가 새 스키마로 이동되면 삭제됩니다. 보안 개체의 소유자가 명시적으로 설정된 경우 소유자는 변경되지 않은 상태로 유지됩니다. 보안 개체 소유자가 SCHEMA OWNER로 설정된 경우에는 소유자가 SCHEMA OWNER로 유지되지만 이동 후 SCHEMA OWNER는 새 스키마의 소유자로 확인됩니다. principal_id 새 소유자NULL의 입니다.

중요합니다

저장 프로시저, 함수, 뷰 또는 트리거를 다른 스키마로 전송하는 데 사용하는 ALTER SCHEMA 경우 definition 카탈로그 뷰의 열에 있는 개체의 스키마 이름(있는 경우) 또는 OBJECT_DEFINITION 기본 제공 함수의 결과로 변경되지 않습니다. 따라서 ALTER SCHEMA 이러한 개체 형식을 이동하는 데 사용하면 안 됩니다. 대신 해당 개체를 삭제하고 새 스키마로 다시 만듭니다.

테이블이나 동의어와 같은 개체를 이동할 경우 이 개체를 참조하는 개체는 자동으로 업데이트되지 않습니다. 이동된 개체를 참조하는 개체는 수동으로 수정해야 합니다. 예를 들어 테이블 이름을 바꿨고 해당 테이블이 트리거에서 참조되는 경우 트리거를 수정하여 새로운 스키마 이름을 적용해야 합니다. sys.sql_expression_dependencies를 사용하여 이 개체에 종속된 개체를 나열한 다음, 개체를 이동할 수 있습니다.

SQL Server Management Studio를 사용하여 테이블의 스키마를 변경하려면 개체 탐색기에서 테이블을 마우스 오른쪽 단추로 클릭한 다음 디자인을 선택합니다. F4 키를 눌러 속성 창을 엽니다. 스키마 상자에서 새 스키마를 선택합니다.

ALTER SCHEMA는 스키마 수준 잠금을 사용합니다.

주의

Fabric SQL 분석 엔드포인트에서 T-SQL을 통해 스키마 간에 테이블을 전송하는 것은 지원되지 않습니다. OneLake와 SQL 분석 엔드포인트 간의 동기화 작업에 부정적인 영향을 미칠 수 있습니다.

사용 권한

한 스키마에서 다른 스키마로 보안 개체를 이동하려면 현재 사용자에게 보안 개체(스키마가 아님)에 대한 CONTROL 권한과 대상 스키마에 대한 ALTER 권한이 있어야 합니다.

보안 개체에 EXECUTE AS OWNER 사양이 있고 소유자가 SCHEMA OWNER로 설정된 경우에는 사용자가 대상 스키마의 소유자에 대한 IMPERSONATE 권한도 가져야 합니다.

이동되는 보안 개체와 연결된 사용 권한은 이동 시 모두 삭제됩니다.

예제

A. 테이블의 소유권 이전

다음 예에서는 HumanResources 스키마에서 Address 스키마로 Person 테이블을 이동하여 HumanResources 스키마를 수정합니다.

USE AdventureWorks2022;  
GO  
ALTER SCHEMA HumanResources TRANSFER Person.Address;  
GO  

B. 형식의 소유권 이전

다음 예에서는 Production 스키마에 형식을 만든 다음 해당 형식을 Person 스키마로 전송합니다.

USE AdventureWorks2022;  
GO  

CREATE TYPE Production.TestType FROM [VARCHAR](10) NOT NULL ;  
GO  

-- Check the type owner.  
SELECT sys.types.name, sys.types.schema_id, sys.schemas.name  
    FROM sys.types JOIN sys.schemas   
        ON sys.types.schema_id = sys.schemas.schema_id   
    WHERE sys.types.name = 'TestType' ;  
GO  

-- Change the type to the Person schema.  
ALTER SCHEMA Person TRANSFER type::Production.TestType ;  
GO  

-- Check the type owner.  
SELECT sys.types.name, sys.types.schema_id, sys.schemas.name  
    FROM sys.types JOIN sys.schemas   
        ON sys.types.schema_id = sys.schemas.schema_id   
    WHERE sys.types.name = 'TestType' ;  
GO  

예: Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)

C. 테이블의 소유권 이전

다음 예는 Region 스키마에 dbo 테이블을 만들고, Sales 스키마를 만든 다음, Region 스키마에서 dbo 스키마로 Sales 테이블을 이동합니다.

CREATE TABLE dbo.Region   
    (Region_id INT NOT NULL,  
    Region_Name CHAR(5) NOT NULL)  
WITH (DISTRIBUTION = REPLICATE);  
GO  

CREATE SCHEMA Sales;  
GO  

ALTER SCHEMA Sales TRANSFER OBJECT::dbo.Region;  
GO