В этом руководстве вы узнаете, как использовать оператор SQL Server ALTER SCHEMA для переноса защищаемого объекта из одной схемы в другую.
Обзор оператора SQL Server ALTER SCHEMA
Оператор ALTER SCHEMA позволяет переносить защищаемый объект из одной схемы в другую в пределах одной и той же базы данных.
Обратите внимание, что защищаемый объект — это ресурс, доступ к которому контролирует система авторизации Database Engine. Например, таблица — это защищаемый объект.
Ниже показан синтаксис оператора ALTER SCHEMA:
ALTER SCHEMA target_schema_name TRANSFER [ entity_type :: ] securable_name;
В этом синтаксисе:
- target_schema_name — имя схемы в текущей базе данных, в которую вы хотите переместить объект. Обратите внимание, что это не может быть SYS или INFORMATION_SCHEMA.
- entity_type может быть Object, Type или XML Schema Collection. По умолчанию Object. entity_type представляет класс сущности, для которой изменяется владелец.
- object_name — это имя защищаемого объекта, который вы хотите переместить в target_schema_name.
Если вы перемещаете хранимую процедуру, функцию, представление или триггер, SQL Server не изменит имя схемы этих защищаемых объектов. Поэтому рекомендуется удалить и заново создать эти объекты в новой схеме вместо использования оператора ALTER SCHEMA для перемещения.
Если вы перемещаете объект, например, таблицу или синоним, SQL Server не будет автоматически обновлять ссылки для этих объектов. Вам необходимо вручную изменить ссылки, чтобы отразить новое имя схемы.
Например, если вы перемещаете таблицу, на которую ссылается хранимая процедура, вам необходимо изменить хранимую процедуру, чтобы она отражала новое имя схемы.
Пример оператора SQL Server ALTER SCHEMA
Сначала создайте новую таблицу с именем offices в схеме dbo:
CREATE TABLE dbo.offices ( office_id INT PRIMARY KEY IDENTITY, office_name NVARCHAR(40) NOT NULL, office_address NVARCHAR(255) NOT NULL, phone VARCHAR(20), );
Далее вставьте несколько строк в таблицу dob.offices:
INSERT INTO dbo.offices(office_name, office_address) VALUES ('Silicon Valley','400 North 1st Street, San Jose, CA 95130'), ('Sacramento','1070 River Dr., Sacramento, CA 95820');
Затем создайте хранимую процедуру, которая находит офис по идентификатору:
CREATE PROC usp_get_office_by_id( @id INT ) AS BEGIN SELECT * FROM dbo.offices WHERE office_id = @id; END;
После этого перенесите эту таблицу dbo.offices в схему продаж:
ALTER SCHEMA sales TRANSFER OBJECT::dbo.offices;
Если вы выполните хранимую процедуру usp_get_office_by_id:
exec usp_get_office_by_id @id=1;
SQL Server выдаст ошибку:
Msg 208, Level 16, State 1, Procedure usp_get_office_by_id, Line 5 [Batch Start Line 30] Invalid object name 'dbo.offices'.
Наконец, вручную измените dbo.offices на sales.offices внутри хранимой процедуры, чтобы отразить новую схему:
CREATE PROC usp_get_office_by_id( @id INT ) AS BEGIN SELECT * FROM sales.offices WHERE office_id = @id; END;
Краткое содержание
- Используйте оператор SQL Server ALTER SCHEMA для переноса защищаемого объекта из одной схемы в другую в пределах одной и той же базы данных.