Текст ошибки:
Msg 2760, Level 16, State 1, Line 588
The specified schema name "copy" either does not exist or you do not have permission to use it.
Msg 208, Level 16, State 1, Line 607
Invalid object name 'copy.REPORTS'.
Msg 15151, Level 16, State 1, Line 664
Cannot find the object 'REPORTS', because it does not exist or you do not have permission.
Msg 15151, Level 16, State 1, Line 665
Cannot drop the schema 'copy', because it does not exist or you do not have permission.
Патчи запускаются из командной строки с помощью "
sqlcmd"
В чём суть: Создаём схему "copy", создаём таблицу, которая уже есть в бд, но в схеме dbo. Далее из dbo.REPORTS получаем данные, модифицируем (там удаление дубликатов со сложением некоторых значений). Помещаем модифицированные данные в copy.REPORTS. Далее удаляем dbo.REPORTS и у copy.REPORTS меняем схему на dbo.
Плюс замены схемы в том, что не нужно ничего переименовывать, когда нужно создать такую же таблицу, никакие ограничения, ничего. Это удобно.
При выполнении этого запроса, когда он запущен из командной строки (это часть патча к БД), то после создания схемы, дальше вылетает ошибка, что такой схемы нет или нет прав на её создание. Как это фиксить? Скрипт запускается из под Service administrator (sa).
IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'copy')
EXECUTE( N'CREATE SCHEMA copy')
GO
IF OBJECT_ID('copy.REPORTS', 'U') IS NOT NULL
DROP TABLE copy.REPORTS;
GO
-- Таблица реальная немного другая, это от фонаря
CREATE TABLE copy.REPORTS (
REPORT_DATE DATE NOT NULL
,REPORT_ID INT NOT NULL
,CONSTRAINT PK_REPORTS PRIMARY KEY CLUSTERED (REPORT_DATE, REPORT_ID)
) ON [PRIMARY]
GO
-- ЗАПРОС МОДИФИЦИРУЮЩИЙ ДАННЫЕ ИЗ dbo.REPORTS и помещающий их в copy.REPORTS
DROP TABLE dbo.REPORTS;
GO
ALTER SCHEMA dbo TRANSFER copy.REPORTS
GO
EXECUTE( N'DROP SCHEMA copy');