程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 由Sybase向SQL Server移植數據庫

由Sybase向SQL Server移植數據庫

編輯:關於SqlServer
我最近參與了將一個Sybase數據庫移植到Microsoft SQL Server 2000上的項目,我在這一項目上獲得的經驗,將對Sybase數據庫管理員把Sybase數據庫移植到SQL Server 2000平台上有一定的幫助。

  盡管二者之間的一些差別是相當大的,例如Sybase數據庫管理系統中的存儲過程在SQL Server就不能被編譯,而其它差別則不太大。在完成這一轉換前,對腳本文件和存儲過程中編程邏輯的行為和結果進行測試是很有必要的。

  在下面的部分中,我們將討論這二種數據庫系統之間的一些主要的不同點,在移植的規劃階段,我們必須仔細研究這些區別。

  數據兼容模式

  對SQL Server 2000和Sybase之間的一些兼容性差別的一個臨時性解決方案是改變SQL Server中的數據庫兼容性級別,使之與Sybase相符。為此,我們可以使用sp_dbcmptlevel存儲過程。
下面表中的語句和結果顯示出不同版本數據庫之間的差別:
(Untitled-1)

  注意:

  1、當兼容性模式被設置為70時,下面的詞匯不能被用作對象名和標識符:BACKUP、DENY、PRECENT、RESTORE和TOP。

  2、當兼容性模式被設置為65時,下面的詞匯不能被用作對象名和標識符:AUTHORIZATION、CASCASE、CROSS、DISTRIBUTED、ESCAPE、FULL、INNER、JOIN、LEFT、OUTER、PRIVILEGES、RESTRICT、RIGHT、SCHEMA和WORK。

  下面是sp_dbcmptlevel的語法:

sp_dbcmptlevel [[@dbname=] name][,[@new_cmptlevel=]version]

  @dbname是用於檢查和改變兼容性水平的數據庫名字。

  @new_cmptlevel決定數據庫被設置的兼容性水平(將它設置為70、65、60,缺省值為NULL)。

  例如:

sp_dbcmptlevel pubs

  這一行代碼返回下面的結果:

The current compatibility level is 70.(當前的兼容性級別為70。)

  現在我們來看一下另外一個例子:

sp_dbcmptlevel pubs, 65

  它返回如下的結果:

DBCC execution completed. (DBCC執行結束。)

  果DBCC打印出錯誤信息,則需要與系統管理員聯系。我們可以使用rerunsp_dbcmptlevel驗證pubs數據庫是否修改得正確:

sp_dbcmptlevel pubs

  它返回下面的結果:

The current compatibility level is 65(當前的兼容性級別為65。)

  除了上面的例子外,兼容性級別的差別還擴展到了保留字。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 表明連接運行在鏈鎖模式下

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved