Параметры проекта (преобразование) (Db2ToSQL)
Страница преобразования диалогового окна Параметры проекта содержит настройки, которые настраивают способ, которым Помощник по миграции SQL Server (SSMA) преобразует синтаксис Db2 в синтаксис SQL Server.
Область преобразования доступна в диалоговом окне "Параметры проекта" и "Параметры проекта по умолчанию":
Чтобы указать параметры для всех проектов SSMA, в меню "Сервис " выберите параметры проекта по умолчанию, выберите тип проекта миграции, для которого необходимо просмотреть или изменить из раскрывающегося списка "Целевая версия миграции", а затем выберите "Общие " в нижней части левой области и выберите "Преобразование".
Чтобы указать параметры для текущего проекта, в меню "Сервис " выберите "Параметры проекта", а затем выберите "Общие " в нижней части левой области, а затем выберите "Преобразование".
Сообщения о преобразовании
Создание сообщений о примененных проблемах
Указывает, генерирует ли SSMA информационные сообщения во время преобразования, отображает их в области вывода и добавляет их в преобразованный код.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
Режим по умолчанию и оптимистично: нет
Полный режим: нет
Прочие параметры
Преобразование выражений ROWNUM в целые числа
Когда SSMA преобразует выражения ROWNUM, оно преобразует выражение в предложение TOP, за которым следует выражение. В следующем примере показано использование ROWNUM в операторе Db2 DELETE.
DELETE FROM Table1
WHERE ROWNUM < expression
AND Field1 >= 2
В следующем примере показан результирующий код Transact-SQL:
DELETE TOP (expression - 1)
FROM Table1
WHERE Field1 >= 2
Метод TOP требует, чтобы выражение TOP-предложения вычислялось целым числом. Если целое число отрицательное, инструкция создает ошибку.
Если выбрать "Да", SSMA приводит выражение в виде целого числа.
Если выбрать "Нет", SSMA помечает все не целочисленные выражения как ошибку в преобразованном коде.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию или полный режим: нет
Оптимистичный режим: Да
Сопоставление схем по умолчанию
Этот параметр указывает, как схемы Db2 сопоставляются со схемами SQL Server. В этом параметре доступны два варианта:
Схема в базу данных: в этом режиме схема Db2 по умолчанию сопоставляется с
dbo
схемой SQL Server в базе данных SQL Serversch1
.Соответствие схем: В данном режиме схема Db2 по умолчанию сопоставляется со схемой SQL Server в базе данных SQL Server, заданной в диалоговом окне подключения.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: схема в базу данных
Способы преобразования инструкции MERGE
При выборе инструкции INSERT, UPDATE, DELETE SSMA преобразует инструкцию MERGE в инструкции INSERT, UPDATE, DELETE.
Если выбрана инструкция MERGE, SSMA преобразует инструкцию MERGER в инструкцию MERGE в SQL Server.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: использование инструкции MERGE
Преобразование вызовов в подпрограммы, использующие аргументы по умолчанию
Функции SQL Server не поддерживают пропуск параметров в вызове функции. Кроме того, функции и процедуры SQL Server не поддерживают выражения в качестве значений параметров по умолчанию.
Если выбрать "Да " и вызов функции не учитывает параметры, SSMA вставляет ключевое слово по умолчанию в функцию и вызывается в правильном положении. Затем он помечает вызов предупреждением.
Если выбрать "Нет", SSMA помечает вызовы функции как ошибки.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: да
Преобразование функции COUNT в COUNT_BIG
Если функции COUNT, скорее всего, возвращают значения, превышающие 2 147 483 647, что равно 231-1, необходимо преобразовать функции в COUNT_BIG.
Если выбрать "Да", SSMA преобразует все использование COUNT в COUNT_BIG.
Если выбрать "Нет", функции остаются в состоянии COUNT. SQL Server возвращает ошибку, если функция возвращает значение больше 231-1.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
Стандартный или полный режим: да
Оптимистичный режим: нет
Преобразование инструкции FORALL в инструкцию WHILE
Определяет, как SSMA будет обрабатывать циклы FORALL в элементах коллекции PL/SQL.
Если выбрать "Да", SSMA создает цикл WHILE, в котором элементы коллекции извлекаются по одному.
Если выбрать "Нет", SSMA создает набор строк из коллекции с помощью метода nodes() и использует его в качестве одной таблицы. Это более эффективно, но делает выходной код менее читаемым.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
Режим по умолчанию и оптимистично: нет
Полный режим: Да
Преобразование внешних ключей с помощью действия с ссылкой SET NULL на столбец, который имеет значение NOT NULL
Db2 позволяет создавать ограничения внешнего ключа, для которых невозможно выполнить действие SET NULL
, поскольку в ссылочном столбце не допускаются NULL-значения. SQL Server не разрешает такую конфигурацию внешнего ключа.
Если выбрать "Да", SSMA создает ссылки на действия, как в Db2, но перед загрузкой ограничения в SQL Server необходимо внести изменения вручную. Например, можно выбрать NO ACTION вместо SET
NULL
.Если выбрать "Нет", ограничение помечается как ошибка.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: нет
Преобразование вызовов функций в вызовы процедур
Некоторые функции Db2 определяются как автономные транзакции или содержат инструкции, которые не будут допустимыми в SQL Server. В этих случаях SSMA создает процедуру и функцию, которая является оболочкой для процедуры. Преобразованная функция вызывает процедуру реализации.
SSMA может преобразовать вызовы к функции-оболочке в вызовы процедуры. Это создает более читаемый код и может повысить производительность. Однако контекст не всегда разрешает его; Например, невозможно заменить вызов функции в списке SELECT вызовом процедуры. SSMA имеет несколько вариантов, чтобы охватывать распространенные случаи:
Если выбрать Always, SSMA пытается преобразовать вызовы функции-оболочки в вызовы процедур. Если текущий контекст не разрешает это преобразование, создается сообщение об ошибке. Таким образом, вызовы функций не остаются в созданном коде.
При выборе по возможности SSMA выполняет переход к вызовам процедур только в том случае, если функция имеет выходные параметры. Если перемещение невозможно, выходной атрибут параметра удаляется. Во всех остальных случаях SSMA оставляет вызовы функций.
Если выбрать "Никогда", SSMA оставляет все вызовы функций в виде вызовов функций. Иногда этот выбор может быть неприемлемым из-за причин производительности.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: по возможности
Преобразуйте инструкции LOCK TABLE
SSMA может преобразовать многие инструкции LOCK TABLE в табличные подсказки. SSMA не может преобразовать операторы LOCK TABLE, содержащие предложения PARTITION, SUBPARTITION, @dblink и NOWAIT, и помечает такие операторы сообщениями об ошибке преобразования.
Если выбрать "Да", SSMA преобразует поддерживаемые инструкции LOCK TABLE в подсказки для таблиц.
Если выбрать «Нет», SSMA помечает все инструкции LOCK TABLE с сообщениями об ошибке преобразования.
В следующей таблице показано, как SSMA преобразует режимы блокировки Db2:
Режим блокировки Db2 | Подсказка таблицы SQL Server |
---|---|
ROW SHARE | ROWLOCK, HOLDLOCK |
ROW EXCLUSIVE | ROWLOCK, XLOCK, HOLDLOCK |
SHARE UPDATE = ROW SHARE | ROWLOCK, HOLDLOCK |
ПОДЕЛИТЬСЯ | TABLOCK, HOLDLOCK |
SHARE ROW EXCLUSIVE | TABLOCK, XLOCK, HOLDLOCK |
ЭКСКЛЮЗИВ | TABLOCKX, HOLDLOCK |
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: да
Преобразование инструкций OPEN-FOR для параметров REF CURSOR OUT
В Db2 оператор OPEN-FOR можно использовать для возврата набора результатов в параметр OUT подпрограммы типа REF CURSOR. В SQL Server хранимые процедуры напрямую возвращают результаты инструкций SELECT.
SSMA может преобразовать многие инструкции OPEN-FOR в инструкции SELECT.
Если выбрать "Да", SSMA преобразует инструкцию OPEN-FOR в инструкцию SELECT, которая возвращает результирующий набор клиенту.
Если выбрать "Нет", SSMA создает сообщение об ошибке в преобразованном коде и на панели вывода.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: да
Преобразование записи в виде списка отдельных переменных
SSMA может преобразовать записи Db2 в отдельные переменные и в XML-переменные с определенной структурой.
Если выбрать "Да", SSMA преобразует запись в список отдельных переменных, когда это возможно.
Если выбрать "Нет", SSMA преобразует запись в XML-переменные с определенной структурой.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: да
Преобразование вызовов функции SUBSTR в вызовы функции SUBSTRING
SSMA может преобразовывать вызовы функции Db2 SUBSTR в вызовы функции substring в SQL Server в зависимости от количества параметров. Если SSMA не может преобразовать вызов функции SUBSTR или количество параметров не поддерживается, SSMA преобразует вызов функции SUBSTR в пользовательский вызов функции SSMA.
Если выбрать Да, SSMA преобразует вызовы функций SUBSTR с тремя параметрами в substring SQL Server. Другие функции SUBSTR будут преобразованы для вызова пользовательской функции SSMA.
Если выбрать "Нет", SSMA преобразует вызов функции SUBSTR в пользовательский вызов функции SSMA.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
Режим по умолчанию и оптимистично: да
Полный режим: нет
Преобразование подтипов
SSMA может преобразовать подтипы PL/SQL двумя способами:
Если выбрать "Да", SSMA создает определяемый пользователем тип SQL Server из подтипа и использует его для каждой переменной этого подтипа.
Если выбрать "Нет", SSMA заменяет все объявления источника подтипа базовым типом и преобразовывает результат как обычно. В этом случае дополнительные типы не создаются в SQL Server
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: нет
Преобразование синонимов
Синонимы для следующих объектов Db2 можно перенести в SQL Server:
- Таблицы и таблицы объектов
- Представления и виды объектов
- Хранимые процедуры и функции
- Материализованные представления
Синонимы для следующих объектов Db2 можно заменить прямыми ссылками на объекты:
- Последовательности
- Пакеты
- Объекты схемы классов Java
- Пользовательские объектные типы
Другие синонимы нельзя перенести. SSMA генерирует сообщения об ошибках для синонима и для всех ссылок, использующих этот синоним.
Если выбрать "Да", SSMA создает синонимы SQL Server и прямые ссылки на объекты в соответствии с предыдущими списками.
Если выбрать "Нет", SSMA создает прямые ссылки на объекты для всех синонимов, перечисленных здесь.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: да
Конвертировать TO_CHAR(дата, формат)
SSMA может преобразовать функцию Db2 TO_CHAR(дата, формат) в процедуры из базы данных sysdb.
Если выбрать Using TO_CHAR_DATE, SSMA преобразует TO_CHAR(дата, формат) в функцию TO_CHAR_DATE, используя английский язык для преобразования.
Если выбрать функцию Using TO_CHAR_DATE_LS (учитывая NLS), SSMA преобразует TO_CHAR(дата, формат) в функцию TO_CHAR_DATE_LS, используя язык сеанса для преобразования.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
Режим по умолчанию/оптимистичный: использование функции TO_CHAR_DATE
Полный режим: использование функции TO_CHAR_DATE_LS (уход за NLS)
Преобразование заявлений обработки транзакций
SSMA может преобразовать инструкции обработки транзакций Db2:
Если выбрать "Да", SSMA преобразует инструкции обработки транзакций Db2 в инструкции SQL Server.
Если выбрать "Нет", SSMA помечает инструкции обработки транзакций как ошибки преобразования.
Примечание.
Db2 неявно открывает транзакции. Чтобы эмулировать это поведение в SQL Server, необходимо добавить инструкции BEGIN TRANSACTION вручную, где нужно запустить транзакции. Кроме того, можно выполнить команду SET IMPLICIT_TRANSACTIONS ON в начале сеанса. SSMA добавляет SET IMPLICIT_TRANSACTIONS ON автоматически при преобразовании подпрограмм с автономными транзакциями.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: да
Эмулировать поведение Db2 NULL в предложениях ORDER BY
Значения NULL упорядочены по-разному в SQL Server и Db2:
В SQL Server
NULL
значения являются наименьшими значениями в упорядоченном списке. В спискеNULL
по возрастанию сначала отображаются значения.В Db2
NULL
значения являются самыми высокими значениями в упорядоченном списке. По умолчанию значенияNULL
появляются последними в списке по возрастанию.Db2 имеет предложения NULLS FIRST и NULLS LAST, что позволяет изменить порядок сортировки NULL в Db2.
SSMA может эмулировать поведение DB2 ORDER BY, проверяя значения NULL
. Затем он сначала упорядочивается по значениям NULL
в указанном порядке, а затем упорядочивается другими значениями.
Если выбрать "Да", SSMA преобразует инструкцию Db2 таким образом, чтобы эмулировать поведение DB2 ORDER BY.
Если выбрать "Нет", SSMA игнорирует правила Db2 и создает сообщение об ошибке при обнаружении предложений NULLS FIRST и NULLS LAST.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
Режим по умолчанию и оптимистично: нет
Полный режим: Да
Эмулировать исключения на количество строк в операторе SELECT
Если инструкция SELECT с предложением INTO не возвращает строки, Db2 вызывает исключение NO_DATA_FOUND. Если инструкция возвращает две или более строк, возникает исключение TOO_MANY_ROWS. Преобразованная инструкция в SQL Server не вызывает никаких исключений, если число строк отличается от одного.
Если выбрать "Да", SSMA добавляет вызов процедуры sysdb db_error_exact_one_row_check после каждой инструкции SELECT. Эта процедура эмулирует исключения NO_DATA_FOUND и TOO_MANY_ROWS. Это значение по умолчанию, и оно позволяет воспроизвести поведение Db2 как можно ближе. Всегда следует выбрать "Да", если в исходном коде есть обработчики исключений, обрабатывающие эти ошибки. Если инструкция SELECT возникает внутри определяемой пользователем функции, этот модуль преобразуется в хранимую процедуру, так как выполнение хранимых процедур и создание исключений несовместимо с контекстом функции SQL Server.
Если выбрать "Нет", исключения не создаются. Это может быть полезно, если SSMA преобразует определяемую пользователем функцию, и вы хотите, чтобы она оставалась функцией в SQL Server
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: да
Создайте ошибку для DBMS_SQL.ПАРСИТЬ
При выборе Ошибка SSMA создает ошибку при преобразовании DBMS_SQL.ПАРС.
При выборе Предупреждение SSMA генерирует предупреждение при преобразовании DBMS_SQL.PARSE.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: ошибка
Создание столбца ROWID
Когда SSMA создает таблицы в SQL Server, он может создать столбец ROWID. При переносе данных каждая строка получает новое значение UNIQUEIDENTIFIER, созданное функцией newid().
Если выбрать "Да", столбец ROWID создается во всех таблицах, а SQL Server создает идентификаторы GUID при вставке значений. Всегда выберите "Да ", если вы планируете использовать средство тестирования SSMA.
Если выбрать "Нет", столбцы ROWID не добавляются в таблицы.
Добавьте столбец ROWID для таблиц с триггерами добавить ROWID для таблиц, содержащих триггеры (по умолчанию).
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
Стандартный или оптимистичный режим: добавление столбца ROWID для таблиц с триггерами
Полный режим: Да
Создание уникального индекса в столбце ROWID
Указывается, генерирует ли SSMA уникальный индекс на столбце, созданном с помощью ROWID. Если для параметра задано YES
значение, создается уникальный индекс. Если задано NO
значение, уникальный индекс не создается в столбце ROWID.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: да
Преобразование локальных модулей
Определяет тип конверсии вложенной подпрограммы Db2, объявленной в автономной хранимой процедуре или функции.
Если выбрать Inline, вложенные вызовы подпрограммы заменяются её телом.
Если выбраны хранимые процедуры, вложенная подпрограмма преобразуется в хранимую процедуру SQL Server, и её вызовы заменяются на вызов этой процедуры.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: встроенный
Использование ISNULL в объединениях строк
Db2 и SQL Server возвращают разные результаты, если сцепления строк включают NULL
значения. Db2 обрабатывает NULL
значение как пустой набор символов. SQL Server возвращает NULL
.
Если выбрать "Да", SSMA заменяет символ объединения Db2 (||) символом объединения SQL Server (+). SSMA также проверяет выражения по обеим сторонам конкатенации на наличие значений
NULL
.Если выбрать "Нет", SSMA заменяет символы объединения, но не проверяет наличие
NULL
значений.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
Используйте ISNULL в вызовах функции REPLACE
Оператор ISNULL используется в вызовах функции REPLACE для эмуляции поведения Db2. Для этого параметра представлены следующие параметры:
- Да
- Нет
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
Режим по умолчанию и оптимистично: нет
Полный режим: Да
Использование ISNULL в вызовах функций CONCAT
Оператор ISNULL используется в вызовах функции CONCAT для эмуляции поведения Db2. Для этого параметра представлены следующие параметры:
- Да
- Нет
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
Режим по умолчанию и оптимистично: нет
Полный режим: Да
Используйте встроенную функцию преобразования, когда это возможно
Если выбрать «Да», SSMA преобразует TO_CHAR(дата, формат) в родную функцию преобразования, если это возможно.
Если выбрать "Нет", SSMA преобразует TO_CHAR(дата, формат) в TO_CHAR_DATE или TO_CHAR_DATE_LS (определяется параметрами convert TO_CHAR(date, format)).
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
Режим по умолчанию и оптимистично: да
Полный режим: нет
Используйте SELECT... FOR XML при преобразовании SELECT... INTO в контексте переменной записи
Указывает, следует ли создавать результирующий набор XML при выборе в переменную записи.
Если выбрать "Да", инструкция SELECT возвращает XML.
Если выбрать "Нет", инструкция SELECT возвращает результирующий набор.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: нет
Преобразование RETURNING клаузы
Преобразование предложения RETURNING в инструкции DELETE в OUTPUT
Db2 предоставляет предложение RETURNING в качестве способа немедленного получения удаленных значений. SQL Server предоставляет такую функциональность с помощью оператора OUTPUT.
Если выбрать "Да", SSMA преобразует предложения RETURNING в инструкции DELETE в предложения OUTPUT. Так как триггеры таблицы могут изменять значения, возвращаемое значение может отличаться в SQL Server, чем в Db2.
Если выбрать "Нет", SSMA создает инструкцию SELECT перед инструкцией DELETE для получения возвращаемых значений.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: да
Преобразовать предложение RETURNING в операторе INSERT в OUTPUT
Db2 предоставляет предложение RETURNING в качестве способа немедленного получения вставленных значений. SQL Server предоставляет эту функциональность с помощью предложения OUTPUT.
Если выбрать «Да», SSMA преобразует клаузулу RETURNING в операторе INSERT в OUTPUT. Так как триггеры таблицы могут изменять значения, возвращаемое значение может отличаться в SQL Server, чем в Db2.
Если выбрать "Нет", SSMA эмулирует функции Db2 путем вставки и выбора значений из эталонной таблицы.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: да
Преобразование предложения RETURNING в операторе UPDATE в оператор OUTPUT
Db2 предоставляет предложение RETURNING в качестве способа немедленного получения обновленных значений. SQL Server предоставляет эту функциональность с помощью предложения OUTPUT.
Если выбрать "Да", SSMA преобразует предложения RETURNING в инструкции UPDATE в предложения OUTPUT. Так как триггеры таблицы могут изменять значения, возвращаемое значение может отличаться в SQL Server, чем в Db2.
Если выбрать "Нет", SSMA создаст инструкции SELECT после инструкций UPDATE для получения возвращаемых значений.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: да
Преобразование последовательности
Преобразуйте генератор последовательностей
В Db2 можно использовать последовательность для создания уникальных идентификаторов.
SSMA может преобразовать последовательности в следующие.
Использование генератора последовательностей SQL Server.
Использование генератора последовательности SSMA.
Идентификатор столбца.
Параметр по умолчанию при преобразовании в SQL Server — использовать генератор последовательностей. Однако SQL Server 2012 (11.x) и SQL Server 2014 (12.x) не поддерживают получение текущего значения последовательности (например, метода currval последовательности Db2). См. сайт блога группы SSMA для получения рекомендаций по миграции метода currval последовательности Db2.
SSMA также предоставляет возможность преобразования последовательности Db2 в эмулятор последовательности SSMA.
Наконец, можно также преобразовать последовательность, назначенную столбцу в таблице, в значения идентификаторов SQL Server. Необходимо указать сопоставление последовательностей со столбцом удостоверений на вкладке Table Db2.
Конвертация CURRVAL вне триггеров
Отображается только в том случае, если для генератора последовательности преобразования задано использование идентификатора столбца. Так как последовательности Db2 являются объектами, разделенными от таблиц, многие таблицы, использующие последовательности, используют триггер для создания и вставки нового значения последовательности. SSMA примечает эти инструкции или помечает их как ошибки, когда комментарий приведет к ошибкам.
Если выбрать "Да", SSMA помечает все ссылки на внешние триггеры в преобразованной последовательности CURRVAL с предупреждением.
Если выбрать "Нет", SSMA помечает все ссылки на внешние триггеры в преобразованной последовательности CURRVAL с ошибкой.