当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-05-02 15:21:00  来源:本站整理

<b>数据变更和转换注意事项(SQL)</b>[MSSQL防范]

赞助商链接



  本文“<b>数据变更和转换注意事项(SQL)</b>[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
利用数据转换服务 (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 导入/导出向导不显示任何错误信息,而是显示任务已成功完成.
唯一的失利指导是一条写入日记文件的日记消息,此文件的名称为 <server>.<database>.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,原始数据不经转换即被复制,将发生部份数据丧失.   以上是“<b>数据变更和转换注意事项(SQL)</b>[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .