Прочитать на английском

Поделиться через


ALTER SCHEMA (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW)в Microsoft FabricХранилище в 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 OWNER будет относиться к владельцу новой схемы. Новый 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  

Дополнительные ресурсы