ALTER SCHEMA (Transact-SQL)

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLAzure Synapse AnalyticsСистема платформы аналитики (PDW)Конечная точка SQL аналитики в Microsoft FabricХранилище в 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

Целевая схема в текущей базе данных. Защищаемый объект перемещается в эту схему. Не может быть SYS или INFORMATION_SCHEMA.

<entity_type>

Класс сущности, для которой изменяется владелец. По умолчанию это объект.

securable_name

Имя одной или двух частей защищаемого объекта, защищаемого схемой, который необходимо переместить в схему.

Замечания

Пользователи и схемы полностью разделены. Схемы не эквивалентны пользователям базы данных. Используйте представления системного каталога для выявления различий между пользователями базы данных и схемами.

ALTER SCHEMA может использоваться только для перемещения защищённых файлов между схемами в одной базе данных. Для изменения или удаления защищаемой сущности в схеме используйте инструкцию ALTER или DROP, специфичную для этой сущности.

Если для аргумента securable_name используется однокомпонентное имя, для поиска защищаемой сущности будут использоваться текущие правила разрешения имен.

Все разрешения, связанные с защищаемым объектом, удаляются при перемещении защищаемой схемы в новую схему. Если владелец защищаемого объекта был явно задан, владелец остается неизменным. Если владелец защищённого объекта установлен как SCHEMA OWNER, владелец останется SCHEMA OWNER; однако после перемещения SCHEMA ВЛАДЕЛЕЦ переходит к владельцу новой схемы. Новый principal_id владелец будет NULL.

Это важно

Если вы используете ALTER SCHEMA для передачи хранимой процедуры, функции, представления или триггера в другую схему, имя схемы не изменится в definition столбце представления каталога sys.sql_modules или в результате встроенной функции OBJECT_DEFINITION . ALTER SCHEMA Поэтому не следует использовать для перемещения этих типов объектов. Лучше удалить и создать объект повторно в его новой схеме.

Перемещение такого объекта, как таблица или столбец, не приводит к автоматическому обновлению ссылок на этот объект. Необходимо вручную изменить любые объекты, которые ссылаются на перемещаемый объект. Например, если перемещается таблица и на эту таблицу имеется ссылка в триггере, то необходимо изменить триггер, указав новое имя схемы. Используйте sys.sql_expression_dependencies, чтобы составить список зависимостей для объекта перед его перемещением.

Чтобы изменить схему таблицы с помощью SQL Server Management Studio, в обозревателе объектов щелкните правой кнопкой мыши таблицу и выберите конструктор. Нажмите клавишу F4, чтобы открыть окно свойств. В поле Схема выберите новую схему.

ALTER SCHEMA использует блокировку уровня схемы.

Осторожность

В конечной точке аналитики SQL Fabric передача таблицы между схемами через T-SQL не поддерживается. Это может негативно повлиять на операцию синхронизации между конечной точкой OneLake и аналитикой SQL.

Разрешения

Для передачи защищаемой сущности из другой схемы текущий пользователь должен иметь разрешения CONTROL на эту сущность (а не на схему) и разрешения ALTER на целевую схему.

Если на защищаемом устройстве указана EXECUTE AS спецификация OWNER, а владелец установлен как SCHEMA OWNER, пользователь также должен иметь разрешение на IMPERSONATE на владельца целевой схемы.

Все разрешения, связанные с перемещаемой защищаемой сущностью, при перемещении удаляются.

Примеры

А. Передача владения таблицей

В следующем примере схема HumanResources изменяется путем перемещения таблицы Address из схемы Person в схему HumanResources.

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

В. Передача владения типом

В следующем примере создается тип в схеме 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)

В. Передача владения таблицей

В следующем примере создается таблица 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