Параметры проекта (преобразование) (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. В этом параметре доступны два варианта:
Схема базы данных: в этом режиме схема Db2 сопоставляется со
dbo
схемойsch1
SQL Server в базе данныхsch1
SQL Server.Схема схемы: в этом режиме схема 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
значение как пустой набор символов. ВОЗВРАЩАЕТ NULL
SQL 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 с ошибкой.