Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92064407
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Sybase

2008-04-10 20:26:12

  来源:chinaitlab.com  

除了上面的例子外,兼容性级别的差别还扩展到了保留字。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
 
 
阅读(324) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~