将 real 数据类型转换为 int 数据类型也许不能返回精确的值,因为 SQL Server 2000 只支持精确度为 6 位数字的
real 数据类型。例如,real 型数字 2147480000 可能生成 2147480065 的 int 值。
从一个文本文件将 string (DBTYPE_WSTR) 列转换为 date (DBTYPE_DATE) 或 time (DBTYPE_TIME) 列时,OLE DB 数据转
换服务组件只接受一种日期或时间格式 (yyyy-mm-dd hh:mm:ss.fffffffff)。使用日期时间字符串转换,或者使用 CDate
函数编码 Microsoft ActiveX® 脚本转换正确地转换日期。
SQL Server 2000 不支持 OLE DB 类型 DBTYPE_DATE 或 DBTYPE_TIME。SQL Server 2000 只支持 DBTYPE_DATETIME。
当使用 DTS 设计器定义数据驱动的查询时,数据目的地必须能够支持 OLE DB ICommand 接口。由于这种限制,类似文本
文件的目的不被支持。
如果 text、ntext 和 image 类型的字段长度超过 8388602 字节,则 DTS 的复制 SQL Server 对象任务将截断超出的部
分。DTS 设计器或 DTS 导入/导出向导不显示任何错误信息,而是显示任务已成功完成。
唯一的失败指示是一条写入日志文件的日志消息,此文件的名称为 ..log,位于"复制 SQL Server 对
象任务属性"对话框的"复制"选项卡所指定的脚本文件目录中。此日志消息详细说明表和列,但不指出发生截断的行。无任
何错误记录写入 DTS 错误文件或 SQL Server 日志。
Microsoft SNA Server
当使用 Microsoft SNA Server 作为数据源时,请考虑下列事项:
AS/400 和 VSAM 的 Microsoft OLE DB 提供程序不支持 DTS 导入/导出向导用来创建或截断表的 SQL 语句。
Microsoft Access
使用 Access 时,应考虑下列事项:
当从 SQL Server 2000 中将数据导出到 Microsoft Access 97 或更早的版本中,Access 的 Microsoft OLE DB 提供程序
在内存中为所有插入设置缓冲区,并且只在 DTS 导入/导出向导完成操作时提交它们。结果是,可以在导出大量表时,面
对内存较小的形势。然而,可以通过构造在多个传递中发送较少行数的 SELECT 语句解决该问题。
Microsoft Visual FoxPro
Microsoft Visual FoxPro® 只支持 numeric 数据类型的 (15,9) 精度。如果导出到 Visual FoxPro 的数据超出该精
度,则会被截断并四舍五入。
ODBC 的 Microsoft OLE DB 驱动程序无法使用 FoxPro ODBC 驱动程序将 BLOB 写入 Visual FoxPro,因为 Visual
FoxPro 不支持动态游标。
ODBC
当连接到 ODBC 数据源时,请考虑下列事项:
ODBC 的 Microsoft OLE DB 提供程序在执行导出操作时需要一个在带有 BLOB 数据列的所有目标表上的唯一键。
当使用带有 SQL Server ODBC 驱动程序的 ODBC 的 Microsoft OLE DB 提供程序时,在安排带有源行集中其它数据类型的
列之后安排所有 BLOB 列。可以使用 SELECT 语句重新将 BLOB 列安排到源行集的末尾。DTS 导入/导出向导自动地执行该
操作。
重要 当使用带有 SQL Server ODBC 驱动程序的 ODBC 的 Microsoft OLE DB 提供程序时,请尝试预览带有连接忙错误的
存储过程失败。如果使用 SQL Server 的 Microsoft OLE DB 提供程序,该问题就不会发生。
如果一个用于 SQL Server 的 Microsoft ODBC 驱动程序连接由多个线程共享,此连接可能会失败,并返回错误信
息"Connection is busy with results for another hstmt"(此连接正忙于其它 hstmt 的结果)。在某些情况下,这将
影响通过 DTS 导入/导出向导生成的包。使用以下方法之一解决此问题:
将 MaxConcurrentSteps 属性设置为1 以消除竞争的线程。
创建其它的 ODBC 连接以消除连接共享。
使用用于 SQL Server 的 Microsoft OLE DB 提供程序 (SQLOLEDB) 连接数据库。如果需要连接 SQL Server 6.5 数据
库,则运行 Instcatl.sql 以启用通过用于 SQL Server 的 Microsoft OLE DB 提供程序进行访问。
Oracle
当使用 Oracle 作为数据源时,请考虑以下事项:
如果将 BLOB(包括 SQL Server 的 text 和 ntext 数据类型)列导出到固定长度的文本字段中,则将默认长度设置为
BLBO 字段的最大长度(大约 2GB)。通过选择较小的但足够的字段长度来防止磁盘溢出,或者在可能的时候使用分隔格
式。
DTS 中使用的用于文本文件的 OLE DB 提供程序不能处理超过两兆字节 (MB) 的 BLOB 数据列。
代码页、排序规则和非 Unicode 数据问题
使用 DTS 在具有不同代码页和排序规则的 SQL Server 数据库间复制数据时,数据可能会丢失或转换不正确。
为避免出现转换问题,应以 Unicode 形式存储国际数据。一旦转换为 Unicode 后,便可很容易地将任何排序规则或代码
页中的数据传送到任何 Microsoft SQL Server 2000 或 Microsoft SQL Server 7.0 数据库,而不会出现数据丢失或转换
不正确这类问题。
在 Microsoft SQL Server 2000 中,排序规则与具体的代码页相关联并被指派给各个列。(Microsoft SQL Server 7.0
使用单个的默认代码页且不支持列级排序规则)。如果用于源列和目的列的代码页匹配,则非 Unicode 列不会发生数据丢
失。在非 Unicode 列间复制数据时,如果源列与目的列不匹配,则将发生数据丢失。在某些情况下,DTS 执行最佳的匹配
映射。如果源代码页包含的字符在目的代码页中未出现,则将发生数据丢失。此外,DTS 执行复制时不需要任何转换干
预,这将导致在两个代码页中不是由同一个二进制值表示的数据丢失。下面的问题及准则分别针对使用复制 SQL Server
对象任务的情况,和使用复制列转换在不同排序规则或代码页之间复制数据的情况。
复制 SQL Server 对象任务
下面论述复制 SQL Server 对象任务如何处理非 Unicode 数据:
在 SQL Server 2000 实例间复制数据时,只要设置复制 SQL Server 对象任务的 UseCollation 属性,便不会发生数据丢
失。
将数据从 SQL Server 2000 实例复制到 SQL Server 7.0 时,对于具有与数据库默认排序规则代码页相匹配的排序规则的
列,使用最佳匹配映射。而具有不同代码页的列中所存储的数据,则被解释为正在用默认代码页进行编码处理,转换过程
中将伴随数据丢失。
将数据从 SQL Server 7.0 复制到SQL Server 2000 实例时,由于 SQL Server 7.0 无法确定其默认代码页所映射的排序
规则,UseCollation 属性不可用。执行复制 SQL Server 对象任务期间不支持任何排序规则,因此,将给非 Unicode 目
的列指派目的数据库的默认排序规则。如果与此排序规则相关联的代码页与源数据库的代码页不匹配,DTS 将执行最佳匹
配映射。
将数据从 SQL Server 7.0 复制到 SQL Server 7.0 时,如果源数据库和目的数据库使用不同的默认代码页,DTS 将执行
最佳匹配映射。
若要确保复制非 Unicode 时不发生数据丢失,可使用 SQL Server 大容量复制功能以 Unicode 格式导出数据,然后使用
大容量复制或 DTS 导入数据。
若要禁用默认排序规则脚本,请添加代码或使用脱接编辑或动态属性任务将 SQLDMOScript2_70Only 的值添加到复制 SQL
Server 对象任务的 ScriptOptionEx 属性中。