快捷搜索:

数据变换和转换注意事项(SQL)

应用数据转换办事 (DTS) 转变或转换异类数据和目的办事器之间的数据之前,请斟酌不合法度榜样、供给法度榜样以及驱动法度榜样支

持数据类型和 SQL 语句的要领的变更。

当应用 Microsoft® SQL Server™ 作为数据源时,请斟酌下列事变:

将 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。

若要经由过程多步骤造访数据,请避免在转换历程中应用 temp 表。应应用全局 temp 表或在 tempdb 中创建永远表。

从 temp 表返回行的存储历程不能用作转换源。可以应用存储历程从全局 temp 表或表返回行。

在转换数据义务、数据驱动的查询义务或 DTS 设计器中的履行 SQL 义务中应用临时表时,请记着:不能应用 Transact-

SQL 语句或调用 temp 表的存储历程作为源。

该限定并不利用于 DTS 设计器的外部。可应用经由过程编程要领造访 SQL Server temp 表的源语句或存储历程。

DTS 导入/导出领导和 DTS 设计器

当应用 DTS 导入导出领导和 DTS 设计器创建包时,请斟酌以下事变:

DTS 用户界面容许共享义务中现有的连接,然则同一个连接不能既用在一个转换的源中又用在该转换的目的中。

应用 DTS 设计器或 DTS 导入/导出领导,有可能为一些只作为数据源的供给法度榜样指定只读或正在应用状态(例如,

Microsoft Access 和 ODBC DSN )。单击"连接属性"对话框中的"高档"选项卡,然后在"高档连接属性"对话框中,将模式

属性值设置为 1。

应用 DTS 导入/导出领导或 DTS 设计器创建表时,在目的地上创建的表的所有者为当前用户(平日是 dbo),与谁是源表

的所有者无关。这将孕育发生这种环境:dbo 试图在目的地创建一个表,而该表的名称已经存在,从而导致考试测验掉败。

当应用 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 的数据越过该精

度,则会被截断并四舍五入。

Visual FoxPro 不支持 SELECT INTO 语句。

DTS 查询设计器支持 Visual FoxPro INSERT VALUE 语句,但不支持应用 SELECT 语句的 INSERT 语句。

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 作为数据源时,请斟酌以下事变:

用于 Oracle 的 Microsoft ODBC 和 OLEDB 驱动法度榜样支持 Oracle 7.3 BLOB 数据类型,不支持 Oracle 8.0 数据类型。

例如,不支持 BLOB、CLOB、NCLOB 和 BFILE。

用于 Oracle 的 Microsoft OBDC 驱动法度榜样不支持将 Unicode 字符串发送到 Oracle 办事器中。Oracle 要求在 Unicode

字符串前加上前缀字母 N。

用于 Oracle 的 Microsoft OBDC 驱动法度榜样不支持 Oracle number 数据类型的负向缩放。

用于 Oracle 的 Microsoft OBDC 驱动法度榜样申报无指定精度的 Oracle number 数据类型的长度为 20 位数字。当从

Oracle (不斟酌目的)中导入时,假如有多于 20 位的数字,并且假如目的表还不存在,可能必须手工地增添精度。

在表中 Oracle 仅支持一个 LONG (BLOB) 数据列。

不能导入或导出拥有混杂或小写名称的 Oracle 列。也不能经由过程应用 Oracle 列名称(包孕应用 DTS 导入/导出领导的空

格)来转换或复制数据。Oracle 要求正确指定并引用区分大年夜小写的列名称。

若要在 SQL Server 2000 和 Oracle 之间履行散播式事务,必须应用 Oracle 8.0.4.1 版本或更新版本。有关更多信息,

请拜见散播式事务。

因为用于 Oracle 的 Microsoft OLE DB 供给法度榜样不支持 IcommandWithParameters,以是它不能用作数据驱动的查询义务

的目的地。在 DTS 设计器中应用此供给法度榜样时,转换数据义务、数据驱动的查询义务以及履行 SQL 义务上的"参数"按钮

将被禁用。

IBM AS/400 上的 DB2

当连接到 DB2 数据源时,请斟酌以下事变:

在 AS/400 系统上不支持 Unicode 或 BLOB。

在 AS/400 办事器上不能转换任何有 NULL 列值的表,由于 AS/400 在其 CREATE TABLE 语句中不支持 NULL 语法。然

而,假如编辑 CREATE TABLE 语法以清除对 NULL 的引用时,则可以发送 NULL 值。AS/400 不支持 NOT NULL;假如没指

定就假定为 NULL。

应用 Sybase ODBC 驱动法度榜样

当连接到一个 Sybase ODBC 数据源时,请斟酌以下事变:

当应用 DTS 导入/导出领导将数据从 SQL Server 转换到 Sybase 11 版本时:

默认环境下,SQL Server numeric (3,0) 数据类型映射为 Sybase smallmoney。为避免数据损掉,请变动此设置。

默认环境下,SQL Server numeric (18,x 或 19,x) 数据类型映射为 Sybase money 数据类型。为避免数据损掉,请变动

此设置。

将数据移动到一个新的 Sybase 表时,假如单击了"列映射和转换"对话框中的"确定"按钮,领导会返回差错信息"表已存

在"。应该轻忽此消息。

不能应用 DTS 导入/导出领导撤除并且从新创建 Sybase 表。必须不应用领导来履行此操作。

DTS 查询设计器不支持 Sybase SQLAnywhere CREATE TABLE 语句。

因为 SQLAnywhere 驱动法度榜样中的限定,DTS 导入/导出领导每次只能将一个表移动到 SQLAnywhere 数据库。可以应用

DTS 设计器来降服此限定。然而,由于 SQLAnywhere 驱动法度榜样不是安然线程,以是,必须将每个表的 Step 工具的

ExecuteInMainThread 属性设置为 True。

假如表中包孕 BLOB 列,则不能将此表复制到 Sybase 目的中。

假如经由过程编程要领从 Sybase 中复制一个包孕 image 数据类型的表,则变动默认的 BLOB 设置会导致掉败。

dBase 和 Paradox

当连接到 dBase 和 Paradox 数据源时,请斟酌以下事变:

dBase 和 Paradox 中的表名称被限定为八个字符。dBase 中的列名称被限定为 10 个字符。

文件导入或导出

当从文本文件导入或导出数据时,请斟酌以下事变:

在 char 或 varchar 列中导入或导出数据时,假如客户端 OEM 代码页与办事器上的代码页不合,则某些扩展字符可能不

被复制。在 nchar 或 nvarchar 列中导入或导出数据时,所有字符均能精确复制。

假如将 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 属性中。

复制列转换

下面叙述复制列转换若何在不合代码页之间处置惩罚非 Unicode 数据:

假如源列为 Unicode 而目的列为非 Unicode,则履行最佳匹配映射,并考试测验在源列和目的列之间转换数据。

假如源列为非 Unicode 而目的列为 Unicode,则不论实际应用的代码页是什么,DTS 都将源列视为属于代码页 1252。

假如源列和目的列都为非 Unicode,原始数据不经转换即被复制,将发生部分数据损掉。

您可能还会对下面的文章感兴趣: