欢迎来到天天文库
浏览记录
ID:21309514
大小:63.00 KB
页数:5页
时间:2018-10-21
《由sybase向sqlserver移植数据库》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、由Sybase向SQLServer移植数据库>>教育资源库 简介 我最近参与了将一个Sybase数据库移植到MicrosoftSQLServer2000上的项目,我在这一项目上获得的经验,将对Sybase数据库管理员把Sybase数据库移植到SQLServer2000平台上有一定的帮助。 尽管二者之间的一些差别是相当大的,例如Sybase数据库管理系统中的存储过程在SQLServer就不能被编译,而其它差别则不太大。在完成这一转换前,对脚本文件和存储过程中编程逻辑的行为和结果进行测试是很有必要的。 在下面的部分中,我们将讨
2、论这二种数据库系统之间的一些主要的不同点,在移植的规划阶段,我们必须仔细研究这些区别。 数据兼容模式 对SQLServer2000和Sybase之间的一些兼容性差别的一个临时性解决方案是改变SQLServer中的数据库兼容性级别,使之与Sybase相符。为此,我们可以使用sp_dbcmptlevel存储过程。 下面表中的语句和结果显示出不同版本数据库之间的差别: (Untitled-1) 注意: 1、当兼容性模式被设置为70时,下面的词汇不能被用作对象名和标识符:BACKUP、DENY、PRECENT、RESTORE和
3、TOP。 2、当兼容性模式被设置为65时,下面的词汇不能被用作对象名和标识符:AUTHORIZATION、CASCASE、CROSS、DISTRIBUTED、ESCAPE、FULL、INNER、JOIN、LEFT、OUTER、PRIVILEGES、RESTRICT、RIGHT、SCHEMA和NMITTEDCONTAINSCONTAINSTABLECROSSCURRENT_DATECURRENT_TIMECURRENT_TIMESTAMPCURRENT_USERDENYDISTRIBUTEDFILEFLOPPYFREETEXTFR
4、EETEXTTABLEFULLIDENTITYCOLINNERJOIN 事务管理模式 SybaseSQLServer Setchained[on:off]Setimplicit_transactions[on:off] 在Sybase中使用下面的代码判断事务模式: SELECTtranchained GO 下面是可能返回的结果: 0表明使用的是非链锁式事务模式 1表明连接运行在链锁模式下 在SQLServer中使用下面的代码判断事务模式: IF(options2)>0 PRINTonELSE PRINT
5、off 下面是可能的返回结果: 0off >0on 隔离水平 在一个关系数据库这样的多线程应用软件中,数据库引擎对运行的进程间的数据是如何被隔离的管理是非常重要的,在表示隔离水平时,Sybase和SQLServer的语法是不同的。下面的表格表明了Sybase和SQLServer在表示隔离水平时的差别。 SybaseSQLServer0READUNMITTED1READMITTED2REPEATABLEREAD3SERIALIZABLE 游标语法 二种产品中存储过程的创建和执行基本相似,但在移植时,游标语句中的
6、一些例外是我们应当注意的。下面是一个例子: CREATEPROCEDUREsql_cursorASDECLARElnamechar(20),fnamechar(20)DECLAREmycursorCURSORFORSELECTau_lname,au_fnameFROMauthorsOPENmycursorFETCHFROMmycursorINTOlname,fnam123下一页>>>>这篇文章来自..,。emycursorINTOlname,fname/***这里应当是一些业务逻辑*/ENDCLOSEmycursorDEALLO
7、CATE/*Sybase数据库在这里需要CURSOR这个词*/mycursor SybaseSQLServer Fetch命令执行成功00 Fetch命令执行失败1-2 没有可存取的记录了2-1 退回触发器 SQLServer中不存在这个命令,因此在向SQLServer移植时,使用了ROLLBACKTRIGGER命令的Sybase存储过程必须被进行修改。在修改带有触发器的数据库表中的数据时,使用ROLLBACKTRIGGER命令容易引起误解,一个ROLLBACKTRIGGER命令只退回触发器以及触发触发器的数据修改,如
8、果已经被提交了,则事务的其它部分会继续,被写到数据库中。因此,事务中的所有语句可能没有被成功地完成,但数据已经被提交了。 下面是Sybase数据库中一个使用ROLLBACKTRIGGER的样例触发器: CREATETABLEtable1(ain
此文档下载收益归作者所有