“项目设置”对话框的“转换”页包含用于自定义 SQL Server 迁移助手 (SSMA) 如何将 Db2 语法转换为 SQL Server 语法的设置。
“项目设置”和“默认项目设置”对话框中提供了“转换”窗格:
- 若要指定所有 SSMA 项目的设置,请在“工具”菜单上选择“默认项目设置”,选择从“迁移目标版本”下拉列表查看或更改设置所需的迁移项目类型,然后选择左窗格底部的“常规”,然后选择“转换”。
- 若要指定当前项目的设置,请在“工具”菜单上选择“项目设置”,然后选择左窗格底部的“常规”,然后选择“转换”。
指定 SSMA 在转换期间是否生成信息性消息、在“输出”窗格中显示这些消息,并将其添加到转换后的代码中。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观模式:否
完整模式:否
当转换 ROWNUM 表达式时,SSMA 会将表达式转换为一个 TOP 子句,后跟表达式。 以下示例演示 Db2 DELETE 语句中的 ROWNUM:
如下示例显示了所生成的 Transact-SQL:
TOP 要求 TOP 子句表达式的计算结果是一个整数。 如果整数为负数,则语句将生成错误。
- 如果选择“是”,SSMA 会将表达式强制转换为整数。
- 如果选择“ 否”,SSMA 会将所有非整数表达式标记为已转换代码中的错误。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/完整模式:否
乐观模式:是
此设置指定如何将 Db2 架构映射到 SQL Server 架构。 此设置提供了两个选项:
- 架构到数据库: 在此模式下,Db2 架构 默认映射到 SQL Server 数据库中 的 SQL Server 架构。
- 架构到架构: 在此模式下,Db2 架构 默认映射到 连接对话框中提供的默认 SQL Server 数据库中的 SQL Server 架构。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:架构到数据库
- 如果选择“使用 INSERT、UPDATE、DELETE 语句”,SSMA 会将 MERGER 语句转换为 INSERT、UPDATE、DELETE 语句。
- 如果选择“使用 MERGE 语句”,SSMA 会将 MERGER 语句转换为 SQL Server 中的 MERGE 语句。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:使用 MERGE 语句
SQL Server 函数不支持函数调用中参数的遗漏。 此外,SQL Server 函数和过程不支持表达式作为默认参数值。
- 如果选择 “是 ”,函数调用省略参数,SSMA 会将关键字 默认值 插入函数,并在正确的位置调用。 然后,它会用警告标记调用。
- 如果选择“ 否”,SSMA 会将函数调用标记为错误。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:是
如果 COUNT 函数很可能返回大于 2,147,483,647(即 231-1)的值,则应将函数转换为 COUNT_BIG。
- 如果选择“ 是”,SSMA 会将 COUNT 的所有用途转换为COUNT_BIG。
- 如果选择“ 否”,函数将保留为 COUNT。 如果函数返回的值大于 231-1,则 SQL Server 将返回错误。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/完整模式:是
乐观模式:否
定义 SSMA 如何处理 PL/SQL 集合元素上的 FORALL 循环。
- 如果选择“是”,SSMA 将创建一个 WHILE 循环,在此循环中会逐个检索集合元素。
- 如果选择“否”,SSMA 将使用 nodes( ) 方法从集合中生成一个行集,并将其用作单个表。 这种做法更高效,但输出代码的可读性欠佳。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观模式:否
完整模式:是
Db2 允许创建外键约束,因为引用列中不允许使用 NUL,因此无法执行 SET 操作。 SQL Server 不允许此类外键配置。
- 如果选择“ 是”,则 SSMA 会像在 Db2 中一样生成引用操作,但在将约束加载到 SQL Server 之前需要进行手动更改。 例如,可以选择 NO ACTION 而不是 SET 。
- 如果选择“ 否”,约束将标记为错误。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:否
某些 Db2 函数定义为自治事务,或包含在 SQL Server 中无效的语句。 在这些情况下,SSMA 将创建一个过程和一个用作此过程的包装器的函数。 转换后的函数将调用实现过程。
SSMA 可以将对包装器函数的调用转换为对此过程的调用。 这样可以创建更具可读性的代码,并能够提高性能。 但是,上下文并不总是允许它;例如,不能将 SELECT 列表中的函数调用替换为过程调用。 SSMA 具有几个选项,可涵盖常见情况:
- 如果选择“始终”,SSMA 会尝试将包装器函数调用转换为过程调用。 如果当前上下文不允许此转换,将会产生一条错误消息。 这样,所生成的代码中不会保留任何函数调用。
- 如果选择“如果可能”,SSMA 将只在函数具有输出参数时才会转换为过程调用。 如果无法进行此转换,将会移除参数的输出属性。 在所有其他情况下,SSMA 都将保留函数调用。
- 如果选择“ 永不”,SSMA 会将所有函数调用保留为函数调用。 有时,由于性能原因,此选项可能不能接受。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:如果可能
SSMA 可以将很多 LOCK TABLE 语句转换为表提示。 SSMA 无法转换包含 PARTITION、SUBPARTITION @dblink和 NOWAIT 子句的任何 LOCK TABLE 语句,并用转换错误消息标记此类语句。
- 如果选择“是”,SSMA 会将支持的 LOCK TABLE 语句转换为表提示。
- 如果选择“ 否”,SSMA 会标记所有 LOCK TABLE 语句并显示转换错误消息。
下表显示了 SSMA 如何转换 Db2 锁模式:
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:是
在 Db2 中,OPEN-FOR 语句可用于将结果集返回到 REF CURSOR 类型的子程序 OUT 参数。 在 SQL Server 中,存储过程直接返回 SELECT 语句的结果。
SSMA 可以将很多 OPEN-FOR 语句转换为 SELECT 语句。
- 如果选择“是”,SSMA 会将 OPEN-FOR 语句转换为一个 SELECT 语句,该语句会将结果集返回给客户端。
- 如果选择“ 否”,SSMA 会在转换后的代码和“输出”窗格中生成错误消息。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:是
SSMA 可以将 Db2 记录转换为单独的变量和具有特定结构的 XML 变量。
- 如果选择“是”,SSMA 会将记录转换为单独变量的列表(如果可能)。
- 如果选择“否”,SSMA 会将记录转换为具有特定结构的 XML 变量。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:是
SSMA 可以根据参数数将 Db2 SUBSTR 函数调用转换为 SQL Server 子字符串 函数调用。 如果 SSMA 无法转换 SUBSTR 函数调用,或不支持参数数,SSMA 会将 SUBSTR 函数调用转换为自定义 SSMA 函数调用。
- 如果选择“是”,SSMA 会将使用三个参数的 SUBSTR 函数调用转换为 SQL Server 子字符串。 SSMA 将转换其他 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 会应用以下设置:
默认/乐观/完整模式:是
SSMA 可以将 Db2 TO_CHAR(date, format) 转换为 sysdb 数据库中的过程。
- 如果选择“使用 TO_CHAR_DATE 函数”,SSMA 会使用用于转换的英语语言将 TO_CHAR(date, format) 转换为 TO_CHAR_DATE 函数。
- 如果选择“使用 TO_CHAR_DATE_LS 函数 (NLS care)”,SSMA 会使用用于转换的会话语言将 TO_CHAR(date, format) 转换为 TO_CHAR_DATE_LS 函数。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观模式:使用 TO_CHAR_DATE 函数
完整模式:使用 TO_CHAR_DATE_LS 函数 (NLS care)
SSMA 可以转换 Db2 事务处理语句:
- 如果选择“是”,SSMA 会将 Db2 事务处理语句转换为 SQL Server 语句。
- 如果选择“否”,SSMA 会将事务处理语句标记为转换错误。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:是
NULL 值在 SQL Server 和 Db2 中以不同的方式排序:
- 在 SQL Server 中, 值是有序列表中的最小值。 在升序列表中, 值首先出现。
- 在 Db2 中, 值是有序列表中的最大值。 默认情况下,在升序列表中,会最后显示 值。
- Db2 具有 NULLS FIRST 和 NULLS LAST 子句,可用于更改 Db2 对 NUL 排序的方式。
SSMA 可以通过检查 值来模拟 Db2 ORDER BY 行为。 随后,它首先按指定顺序中的 值排序,然后按其他值排序。
- 如果选择“是”,SSMA 会以模拟 Db2 ORDER BY 行为的方式转换 Db2 语句。
- 如果选择“ 否”,SSMA 将忽略 Db2 规则,并在遇到 NULLS FIRST 和 NULLS LAST 子句时生成错误消息。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观模式:否
完整模式:是
如果具有 INTO 子句的 SELECT 语句不返回任何行,Db2 将引发NO_DATA_FOUND异常。 如果此语句返回两个或更多的行,将会引发 TOO_MANY_ROWS 异常。 如果行计数不等于 1,SQL Server 中的转换语句不会引发任何异常。
- 如果选择“是”,则 SSMA 会在每个 SELECT 语句后添加对 sysdb 过程 db_error_exact_one_row_check 的调用。 此过程模拟 NO_DATA_FOUND 和 TOO_MANY_ROWS 异常。 这是默认值,它允许尽可能接近复制 Db2 行为。 如果源代码具有处理这些错误的异常处理程序,则应始终选择“是”。 如果 SELECT 语句发生在用户定义的函数内,则此模块将转换为存储过程,因为执行存储过程并引发异常与 SQL Server 函数上下文不兼容。
- 如果选择“ 否”,则不会生成异常。 当 SSMA 转换用户定义的一个函数,而且用户希望它在 SQL Server 中保持为一个函数时,此设置非常有用。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:是
- 如果选择“ 错误”,SSMA 会在转换DBMS_SQL生成错误。解析。
- 如果选择“警告”,SSMA 会在转换DBMS_SQL生成警告。解析。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:错误
当 SSMA 在 SQL Server 中创建表时,它可以创建一个 ROWID 列。 迁移数据之后,每行都会获取 newid() 函数生成的一个新 UNIQUEIDENTIFIER 值。
- 如果选择“ 是”,则会在所有表上创建 ROWID 列,SQL Server 会在插入值时生成 GUID。 如果计划使用 SSMA 测试器,请始终选择 “是 ”。
- 如果选择“ 否”,则不会向表添加 ROWID 列。
- 为包含触发器 的表添加 ROWID 列,为包含触发器的表添加 ROWID(默认值)。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观模式:为包含触发器的表添加 ROWID 列
完整模式:是
指定 SSMA 是否在所生成的 ROWID 列上生成唯一索引列。 如果该选项设置为 ,则会生成唯一索引。 如果设置为 该索引,则不会在 ROWID 列上生成唯一索引。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:是
定义 Db2 嵌套子程序(在独立存储过程或函数中声明)转换的类型。
- 如果选择 “内联”,则嵌套子程序调用将替换为其正文。
- 如果选择 存储过程,则会将嵌套子程序转换为 SQL Server 存储过程,并在此过程调用上替换其调用。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:内联
当字符串串联包含 值时,Db2 和 SQL Server 返回不同的结果。 Db2 将 值视为空字符集。 SQL Server 将返回 。
- 如果选择“ 是”,SSMA 会将 Db2 串联字符 (||) 替换为 SQL Server 串联字符 (+)。 SSMA 还会检查串联两侧的表达式中是否存在 值。
- 如果选择“否”,SSMA 将替换串联字符,但不检查 值。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
REPLACE 函数调用中使用 ISNULL 语句来模拟 Db2 行为。 此设置具有以下选项:
- 是
- 否
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观模式:否
完整模式:是
ISNULL 语句用于 CONCAT 函数调用以模拟 Db2 行为。 此设置具有以下选项:
- 是
- 否
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观模式:否
完整模式:是
- 如果选择“是”,SSMA 会尽可能将 TO_CHAR(date, format) 转换为本机转换函数。
- 如果选择“ 否”,SSMA 会将TO_CHAR(日期、格式)转换为TO_CHAR_DATE或TO_CHAR_DATE_LS(由“转换TO_CHAR(日期,格式)”选项定义)。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观模式:是
完整模式:否
指定在选择进入一个记录变量时是否生成一个 XML 结果集。
- 如果选择“是”,SELECT 语句将返回 XML。
- 如果选择“否”,SELECT 语句将返回一个结果集。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:否
Db2 提供 RETURNING 子句作为立即获取已删除值的方法。 SQL Server 将此功能与 OUTPUT 子句一同提供。
- 如果选择“是”,SSMA 会将 DELETE 语句中的 RETURNING 子句转换为 OUTPUT 子句。 由于表上的触发器可以更改值,因此返回的值在 SQL Server 中可能与 Db2 中的值不同。
- 如果选择“ 否”,SSMA 会在 DELETE 语句之前生成 SELECT 语句以检索返回的值。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:是
Db2 提供 RETURNING 子句作为立即获取插入值的方法。 SQL Server 将此功能与 OUTPUT 子句一同提供。
- 如果选择“是”,SSMA 会将 INSERT 语句中的 RETURNING 子句转换为 OUTPUT。 由于表上的触发器可以更改值,因此返回的值在 SQL Server 中可能与 Db2 中的值不同。
- 如果选择“ 否”,则 SSMA 通过插入和从引用表中选择值来模拟 Db2 功能。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:是
Db2 提供 RETURNING 子句作为立即获取更新值的方法。 SQL Server 将此功能与 OUTPUT 子句一同提供。
- 如果选择“是”,SSMA 会将 UPDATE 语句中的 RETURNING 子句转换为 OUTPUT 子句。 由于表上的触发器可以更改值,因此返回的值在 SQL Server 中可能与 Db2 中的值不同。
- 如果选择“否”,SSMA 将在 UPDATE 语句之后生成 SELECT 语句,以检索返回值。
在“模式”框中选择转换模式后,SSMA 会应用以下设置:
默认/乐观/完整模式:是
在 Db2 中,可以使用序列生成唯一标识符。
SSMA 可以将序列转换为以下内容。
- 使用 SQL Server 序列生成器。
- 使用 SSMA 序列生成器。
- 使用列标识。
转换为 SQL Server 时的默认选项是使用序列生成器。 但是,SQL Server 2012 (11.x) 和 SQL Server 2014 (12.x) 不支持获取当前序列值(例如 Db2 序列 currval 方法)。 有关迁移 Db2 序列 currval 方法的指导,请参阅 SSMA 团队博客网站。
SSMA 还提供将 Db2 序列转换为 SSMA 序列模拟器的选项。
最后,还可以将分配给表中的一个列的序列转换为 SQL Server 标识值。 必须在 Db2 表 选项卡上指定序列与标识列之间的映射
只在“转换序列生成器”设置为“使用列标识”时可见。 由于 Db2 序列是独立于表的对象,因此许多使用序列的表使用触发器来生成和插入新的序列值。 SSMA 将为这些语句添加注释,或者在注释产生错误时将它们标记为错误。
- 如果选择“是”,SSMA 会用警告标记对转换后的序列 CURRVAL 上对外部触发器的所有引用。
- 如果选择“ 否”,SSMA 将标记对转换后的序列 CURRVAL 上所有触发器的引用,并显示错误。
- 用户界面参考 (Db2ToSQL)
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/jjc/13163.html