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


Параметры проекта (преобразование) (Db2ToSQL)

Страница преобразования диалогового окна "Параметры проекта" содержит параметры, которые настраивают способ преобразования синтаксиса Db2 в синтаксис SQL Server Помощник по миграции SQL Server (SSMA).

Область преобразования доступна в диалоговом окне "Параметры проекта" и "Параметры проекта по умолчанию":

  • Чтобы указать параметры для всех проектов 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. В этом параметре доступны два варианта:

  1. Схема базы данных: в этом режиме схема Db2 сопоставляется со dbo схемой sch1 SQL Server в базе данных sch1SQL Server.

  2. Схема схемы: в этом режиме схема Db2 сопоставляется со схемой sch1 SQL Server по умолчанию в базе данных SQL Server по умолчаниюsch1, предоставленной в диалоговом окне подключения.

При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:

По умолчанию/оптимистичный/полный режим: схема в базу данных

Способы преобразования инструкции MERGE

  • При выборе инструкции INSERT, UPDATE, DELETE SSMA преобразует инструкцию MERGE в инструкции INSERT, UPDATE, DELETE.

  • При выборе инструкции MERGE SSMA преобразует инструкцию MERGE в инструкцию 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 , так как NULLs не разрешены в столбце со ссылкой. 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 и @dblinkNOWAIT, и помечают такие инструкции с сообщениями об ошибке преобразования.

  • Если выбрать "Да", 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
EXCLUSIVE TABLOCKX, HOLDLOCKX

При выборе режима преобразования в поле "Режим " 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 в вызовы подстроки SQL Server в зависимости от количества параметров. Если SSMA не может преобразовать вызов функции SUBSTR или количество параметров не поддерживается, SSMA преобразует вызов функции SUBSTR в пользовательский вызов функции SSMA.

  • Если выбрать "Да", SSMA преобразует вызовы функций SUBSTR, которые используют три параметра в подстроку 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(date, format) в процедуры из базы данных sysdb.

  • Если выбрать функцию Using TO_CHAR_DATE, SSMA преобразует TO_CHAR(дата, формат) в функцию TO_CHAR_DATE, используя английский язык для преобразования.

  • Если выбрать функцию using TO_CHAR_DATE_LS (NLS care),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, что позволяет изменить порядок заказов NULLs 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 преобразования. РАЗБИРАТЬ.

При выборе режима преобразования в поле "Режим " 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 значение как пустой набор символов. ВОЗВРАЩАЕТ NULLSQL Server.

  • Если выбрать "Да", 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). Дополнительные сведения о переносе метода currval последовательности Db2 см. на сайте блога группы SSMA.

SSMA также предоставляет возможность преобразования последовательности Db2 в эмулятор последовательности SSMA.

Наконец, можно также преобразовать последовательность, назначенную столбцу в таблице, в значения удостоверений SQL Server. Необходимо указать сопоставление последовательностей с столбцом удостоверений на вкладке "Таблица Db2"

Преобразование CURRVAL вне триггеров

Отображается только в том случае, если для генератора последовательности преобразования задано удостоверение столбца. Так как последовательности Db2 являются объектами, разделенными от таблиц, многие таблицы, использующие последовательности, используют триггер для создания и вставки нового значения последовательности. SSMA примечает эти инструкции или помечает их как ошибки, когда комментарий приведет к ошибкам.

  • Если выбрать "Да", SSMA помечает все ссылки на внешние триггеры в преобразованной последовательности CURRVAL с предупреждением.

  • Если выбрать "Нет", SSMA помечает все ссылки на внешние триггеры в преобразованной последовательности CURRVAL с ошибкой.