Параметры проекта (преобразование) (DB2ToSQL)
Страница преобразования диалогового окна "Параметры проекта" содержит параметры, которые настраивают способ преобразования синтаксиса 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 "sch1" будет сопоставлена по умолчанию с схемой SQL Server "dbo" в базе данных SQL Server "sch1".
Схема схемы: в этом режиме схема DB2 "sch1" будет сопоставлена по умолчанию со схемой SQL Server sch1 в базе данных SQL Server по умолчанию, предоставленной в диалоговом окне подключения.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
По умолчанию/оптимистичный/полный режим: схема в базу данных
Способы преобразования инструкции MERGE
При выборе инструкции INSERT, UPDATE, DELETE SSMA преобразует инструкцию MERGE в инструкции INSERT, UPDATE, DELETE.
При выборе инструкции MERGE SSMA преобразует инструкцию MERGE в инструкцию MERGE в SQL Server.
Предупреждение
Этот параметр параметра проекта доступен только в SQL Server 2008, SQL Server 2012, SQL Server 2014.
При выборе режима преобразования в поле "Режим " 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 |
ЭКСКЛЮЗИВНЫЙ | 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 для таблиц, содержащих триггеры.
Предупреждение
Параметр по умолчанию в случае SQL Server 2005, SQL Server 2008 и SQL Server 2012 и 2014 — добавление столбца ROWID для таблиц с триггерами.
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
Стандартный или оптимистичный режим: добавление столбца ROWID для таблиц с триггерами
Полный режим: Да
Создание уникального индекса в столбце ROWID
Указывает, создает ли SSMA уникальный столбец индекса в созданном столбце ROWID. Если для параметра задано значение "ДА", создается уникальный индекс и если он имеет значение 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. Для этого параметра представлены следующие параметры:
YES
НЕТ
При выборе режима преобразования в поле "Режим " SSMA применяет следующий параметр:
Режим по умолчанию и оптимистично: нет
Полный режим: Да
Использование ISNULL в вызовах функций CONCAT
Оператор ISNULL используется в вызовах функции CONCAT для эмуляции поведения DB2. Для этого параметра представлены следующие параметры:
YES
НЕТ
При выборе режима преобразования в поле "Режим " 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 (этот параметр доступен только при преобразовании в SQL Server 2012 и SQL Server 2014).
Использование генератора последовательности SSMA.
Использование удостоверения столбца.
По умолчанию при преобразовании в SQL Server 2012 или SQL Server 2014 используется генератор последовательностей SQL Server. Однако SQL Server 2012 и SQL Server 2014 не поддерживают получение текущего значения последовательности (например, метода currval последовательности DB2). Дополнительные сведения о переносе метода currval последовательности DB2 см. на сайте блога группы SSMA.
SSMA также предоставляет возможность преобразования последовательности DB2 в эмулятор последовательности SSMA. Это параметр по умолчанию при преобразовании в SQL Server до 2012 г.
Наконец, можно также преобразовать последовательность, назначенную столбцу в таблице, в значения удостоверений SQL Server. Необходимо указать сопоставление последовательностей с столбцом удостоверений на вкладке "Таблица DB2"
Преобразование CURRVAL вне триггеров
Отображается только в том случае, если для генератора последовательности преобразования задано удостоверение столбца. Так как последовательности DB2 являются объектами, разделенными от таблиц, многие таблицы, использующие последовательности, используют триггер для создания и вставки нового значения последовательности. SSMA примечает эти инструкции или помечает их как ошибки, когда комментарий приведет к ошибкам.
Если выбрать "Да", SSMA помечает все ссылки на внешние триггеры в преобразованной последовательности CURRVAL с предупреждением.
Если выбрать "Нет", SSMA помечает все ссылки на внешние триггеры в преобразованной последовательности CURRVAL с ошибкой.