热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

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

使用数据转换服务(DTS)转变或转换异类数据和目的服务器之间的数据之前,请考虑不同程序、提供程序以及驱动程序支持数据类型和SQL语句的方式的变化。当使用Microsoftreg;SQLServer#8482;作为数据源时,请考虑下列事项:将real数据类型转换为int数据类型也
使用数据转换服务 (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,原始数据不经转换即被复制,将发生部分数据丢失。
推荐阅读
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
author-avatar
心诚新城
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有