如何由Sybase向SQL Server移植数据库

ZDNet软件频道 时间:2008-07-09 作者: | 天新网 我要评论()
本文关键词:Mssql SQL SQL Server 数据库 SQL Server
Sybase数据库管理系统中的存储过程在SQL Server就不能被编译,而其它差别则不太大。在完成这一转换前,对脚本文件和存储过程中编程逻辑的行为和结果进行测试是很有必要的。

除了上面的例子外,兼容性级别的差别还扩展到了保留字。Sybase和SQL Server都有许多不能被用作数据库中对象名字的的保留字,二种产品的保留字相似,但并不完全相同。

由于能够在Sybase中使用的对象可能不能在SQL Server中使用,这一问题使得由Sybase向SQL Server的移植凭添了许多困难。下面是在SQL Server中是保留字,而在Sybase中不是保留字的词汇清单。

注意:名字为下列清单中词汇的Sybase数据库中的对象在移植到SQL Server数据库时必须换为其它名字。

  
  BACKUP COLUMN COMMITTED CONTAINS CONTAINSTABLE
  CROSS CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER
  DENY DISTRIBUTED FILE FLOPPY FREETEXT
  FREETEXTTABLE FULL IDENTITYCOL INNER JOIN
 

  事务管理模式:

  Sybase SQL Server
  
  Set chained [ on : off ] Set implicit_transactions [on : off ]
 

  在Sybase中使用下面的代码判断事务模式:

  
  SELECT @@tranchained
  GO
 

  下面是可能返回的结果:

0 表明使用的是非链锁式事务模式。

1 表明连接运行在链锁模式下。

SQL Server中使用下面的代码判断事务模式:

  
  IF (@@options & 2) > 0
  PRINT on
  ELSE
  PRINT off

   下面是可能的返回结果:

  
  0 off
  >0 on
 

  隔离水平

在一个关系数据库这样的多线程应用软件中,数据库引擎对运行的进程间的数据是如何被隔离的管理是非常重要的,在表示隔离水平时,Sybase和SQL Server的语法是不同的。下面的表格表明了Sybase和SQL Server在表示隔离水平时的差别。

  
  Sybase SQL Server
  
  0 READ UNCOMMITTED
  1 READ COMMITTED
  2 REPEATABLE READ
  3 SERIALIZABLE

   游标语法

二种产品中存储过程的创建和执行基本相似,但在移植时,游标语句中的一些例外是我们应当注意的。下面是一个例子:

  
  CREATE PROCEDURE SQL_cursor AS
  DECLARE @lname char(20), @fname char(20)
  DECLARE mycursor CURSOR FOR
  SELECT au_lname, au_fname FROM authors
  OPEN mycursor
  FETCH FROM mycursor INTO @lname, @fname
  WHILE @@ FETCH_STATUS = 0
  /* Sybase数据库使用@SQLSTATUS而不是@@ FETCH_STATUS */
  BEGIN
  FETCH FROM mycursor INTO @lname, @fname
  /*
  ** 这里应当是一些业务逻辑
  */
  END
  CLOSE mycursor
  DEALLOCATE /* Sybase数据库在这里需要CURSOR这个词 * / mycursor
  
  
  Sybase SQL Server
  
  Fetch命令执行成功 0 0
  Fetch命令执行失败 1 -2
  没有可存取的记录了 2 -1
 

Mssql

SQL

SQL Server

数据库

SQL Server


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134