Я в процессе миграции нескольких локальных SQL экземпляров Server 2008R2 Enterprise Edition в AWS. Новые SQL серверы 2017 Enterprise Edition, размещенные на экземплярах EC2.
В настоящее время в нашем SQL Server 2008R2 некоторые большие таблицы разделены (по дате). У меня есть сценарий управления разделами, который первого числа каждого месяца создает новый раздел и отключает самый старый раздел. Это отлично работает. Однако многие столбцы в многораздельных таблицах были созданы с ANSI_PADDING OFF. Когда выполняется процесс управления разделами, он создает промежуточную таблицу, а затем итеративно добавляет новые столбцы в промежуточную таблицу, устанавливая ANSI_PADDING в зависимости от параметра столбца исходных таблиц. Эта промежуточная таблица впоследствии используется в переключателе разделов. Ниже приведен фрагмент кода @
SELECT @AnsiPadding = is_ansi_padded FROM sys.columns WHERE object_id = object_id(@SourceTable) AND [name] = @columnname
IF @AnsiPadding = 1
BEGIN
SET @CreateTablestmt = 'SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON SET ANSI_PADDING ON ALTER TABLE '+@Newtablename+ ' ADD [' + @columnname + '] '+ @DatatypeFormat + ' ' + @nullvalue
PRINT @CreateTablestmt
EXEC (@CreateTablestmt)
END
ELSE
BEGIN
SET @CreateTablestmt = 'SET ANSI_PADDING OFF ALTER TABLE '+@Newtablename+ ' ADD [' + @columnname + '] '+ @DatatypeFormat + ' ' + @nullvalue
PRINT @CreateTablestmt
EXEC (@CreateTablestmt)
END
Я только что тестировал эту же процедуру в SQL Server 2017 EE, и она не работает.
При создании промежуточной таблицы я получаю следующую ошибку:
Msg 50000, Level 16, State 1, Line 533
CONDITIONAL failed because the following SET options have incorrect settings: 'ANSI_PADDING'.
Verify that SET options are correct for use with indexed views and/or indexes on
computed columns and/or filtered indexes and/or query notifications
and/or XML data type methods and/or spatial index operations.
Простое воспроизведение на Microsoft SQL Server 2017 (RTM-CU17) (KB4515579) - 14.0.3238.1 (X64) 13 сентября 2019 15:49:57 Авторское право (C) 2017 Корпорация Microsoft Enterprise Edition (64-разрядная версия) на Windows Server 2016 Datacenter 10.0 (сборка 14393:) (гипервизор)
SET ANSI_PADDING ON;
CREATE TABLE testANSI (col1 VARCHAR(15))
GO
SET ANSI_PADDING OFF;
ALTER TABLE testANSI ADD col2 VARCHAR(20)
выход:
Msg 1934, Level 16, State 1, Procedure DDLEventLogging, Line 13 [Batch Start Line 4]
SELECT failed because the following SET options have incorrect settings: 'ANSI_PADDING'.
Секционированная таблица имеет множество типы данных в нем; UNIQUEIDENTIFIER, SMALLINT, MONEY, CHAR, VARCHAR.
Я не могу изменить определение промежуточной таблицы, так как тогда схемы не совпадают, и я получу ошибки, такие как:
ALTER TABLE SWITCH statement failed because column
'COLUMNA' does not have the same ANSI trimming semantics
in tables 'DB.SCHEMA.MAINTABLE' and 'DB.SCHEMA.STAGINGTABLE'.
Рок и трудное место.
Кроме создания новой таблицы с включенным ANSI_PADDING и загрузки в нее всех моих данных, есть ли у меня какие-либо другие варианты?
Большое спасибо