国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何由Sybase向SQL Server移植數據庫

數據庫 SQL Server 數據庫運維
本文作者參與了一個將Sybase數據庫移植到Microsoft SQL Server 2000上的項目,并在這一項目上獲得了經驗。通過本文,相信能對Sybase數據庫管理員把Sybase數據庫移植到SQL Server 2000平臺上有一定的幫助。

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

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

數據兼容模式

對SQL Server 2000和Sybase之間的一些兼容性差別的一個臨時性解決方案是改變SQL Server中的數據庫兼容性級別,使之與Sybase相符。為此,我們可以使用sp_dbcmptlevel存儲過程。

下面表中的語句和結果顯示出不同版本數據庫之間的差別:

注意:

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

#p#

事務管理模式

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

#p#

退回觸發器

SQL Server中不存在這個命令,因此在向SQL Server移植時,使用了ROLLBACK TRIGGER命令的Sybase存儲過程必須被進行修改。在修改帶有觸發器的數據庫表中的數據時,使用ROLLBACK TRIGGER命令容易引起誤解,一個ROLLBACK TRIGGER命令只退回觸發器以及觸發觸發器的數據修改,如果已經被提交了,則事務的其它部分會繼續,被寫到數據庫中。因此,事務中的所有語句可能沒有被成功地完成,但數據已經被提交了。

下面是Sybase數據庫中一個使用ROLLBACK TRIGGER的樣例觸發器:

CREATE TABLE table1 (a int, b int)
GO
CREATE TRIGGER trigger1 on table1 FOR INSERT
AS
IF EXISTS (SELECT 1 FROM inserted WHERE a = 100)
BEGIN
ROLLBACK TRIGGER with RAISERROR 50000 Invalid value for column a
END
INSERT INTO table2
SELECT a, GETDATE() from inserted
RETURN
GO

在上面的代碼中,除非a = 100,則所有插入table1的數據也被作為審計行插入table2中,如果a = 100,ROLLBACK TRIGGER命令被觸發,而INSERT命令沒有被觸發,批命令的其它部分繼續執行,這時會出現錯誤信息,表明在一個INSERT命令中出現了錯誤。下面是所有的INSERT命令:

BEGIN TRAN
INSERT INTO table1 valueS (1, 1)
INSERT INTO table1 valueS (100,2)
INSERT INTO table1 valueS (3, 3)
GO
SELECT * FROM table1

在執行這些命令后,table1和table2二個數據庫表將各有2個記錄,Table1表中的值為1,1以及3,3,由于ROLLBACK TRIGGER命令,第二個INSERT命令沒有執行;Table2表中的值為1,(當前日期)以及3,(當前日期),由于當a = 100時ROLLBACK TRIGGER被觸發,觸發器中的所有處理被中止,100沒有被插入到Table2表中。

在SQL Server中模擬這一操作需要更多的代碼,外部的事務必須與保存點同時使用,如下所示:

CREATE trigger1 on table1 FOR INSERT
AS
SAVE TRAN trigger1
IF EXISTS (SELECT * FROM inserted WHERE a = 100)
BEGIN
ROLLBACK TRAN trigger1
RAISERROR 50000 ROLLBACK
END
INSERT INTO table2
SELECT a, GETDATE() FROM inserted
GO

這一觸發器以一個存儲點開始,ROLLBACK TRANSACTION只退回觸發邏輯,而不是整個事務(規模要小于Sybases數據庫中的ROLLBACK TRIGGER語句。對批命令的修改如下:

BEGIN TRAN
SAVE TRAN save1
INSERT INTO table1 valueS (1, 1)
IF @@error = 50000
ROLLBACK TRAN save1
SAVE TRAN save2
INSERT INTO table1 valueS (100, 1)
IF @@error = 50000
ROLLBACK TRAN save2
SAVE TRAN save3
INSERT INTO table1 valueS (3, 3)
IF @@error = 50000
ROLLBACK TRAN save3
COMMIT TRAN

我們可以發現,改變不可謂不大。由于ROLLBACK TRIGGER命令能夠使任何批命令不能成功執行,因此在移植的SQL Server存儲過程代碼中必須包括另外的邏輯,根據ROLLBACK TRIGGER的使用,這可能是一個艱巨而必要的任務,沒有什么捷徑可走。如果在移植后所有的ROLLBACK TRIGGER命令被改變為ROLLBACK TRANSACTION,觸發器的執行也會發生變化,因此我們應當十分小心。

【編輯推薦】

  1. Sybase數據備份之BCP用法簡介
  2. 如何設置Sybase的用戶權限來處理進程
  3. 在Sybase Adaptive Server Enterprise中保護數據隱私
責任編輯:楊鵬飛 來源: IT專家網
相關推薦

2010-11-29 11:55:47

SYBASE數據庫

2010-07-15 17:28:50

SQL Server

2010-07-01 15:02:29

SQL Server數

2015-10-30 14:00:33

adosybaseodbc

2010-04-29 11:53:42

Oracle數據庫

2015-10-30 15:05:08

Sybase數據庫安全

2011-03-18 13:23:47

SQL ServerOracle

2010-05-24 18:05:12

MySQL數據庫

2010-07-08 11:05:14

SQL Server數

2011-08-25 11:08:21

Sybase數據庫

2011-07-28 11:44:46

SQL Server數合并表格數據

2021-05-17 06:57:34

SQLServer數據庫

2009-04-22 09:42:07

SQL Server監視鏡像

2011-03-28 15:28:03

SQL Server 數據庫

2011-03-02 17:41:28

2011-03-18 09:48:32

2011-03-24 11:14:46

2011-03-04 13:07:06

SQL Server數

2011-03-11 13:26:23

SQL Server數導入數據

2011-04-29 14:30:23

點贊
收藏

51CTO技術棧公眾號

国产伦理久久久久久妇女 | 一区二区三区韩国| 色婷婷久久久综合中文字幕| 色尼玛亚洲综合影院| 99re在线视频上| 国产精品视频一二三| 户外露出一区二区三区| 国产伦精品一区二区三区免| 久久这里只有精品视频网| 狠狠色噜噜狠狠色综合久| 另类中文字幕网| 自拍一区在线观看| 色噜噜国产精品视频一区二区| 91精品国产91久久久久久黑人| 中文字幕在线视频免费观看| 国产精品一区二区a| 亚洲第一精品夜夜躁人人爽| 成a人片国产精品| 免费看成人哺乳视频网站| 毛片在线免费| 一级日韩一区在线观看| 欧美日韩国产美| 欧美日韩黄色| 欧美日韩国产小视频在线观看| 乱馆动漫1~6集在线观看| 国产精品视频地址| av电影在线观看不卡| 日本高清在线观看视频| 99视频热这里只有精品免费| 日本一级在线观看| 一区二区三区在线播放欧美| 婷婷久久国产对白刺激五月99| 高清无码一区二区在线观看吞精| 亚洲一区二区欧美日韩| 国产精品99| 久久爱av电影| 一区二区三区美女视频| 国产成人精品一区二区三区免费| 国产亚洲精品美女久久久m| 日本一区二区成人在线| 大菠萝精品导航| 国产精品香蕉国产| 2014亚洲片线观看视频免费| 亚洲性图自拍| 亚洲影院高清在线| 亚洲天堂免费看| 欧美极品在线| 一本久久a久久精品vr综合 | 亚洲天堂手机| 成人三级在线| 亚洲一区二区三区四区五区中文| 香蕉久久久久久| 中文字幕精品—区二区日日骚| 色香蕉成人二区免费| 欧美重口另类| 动漫av网站免费观看| 亚洲第一综合天堂另类专| 国产精品v一区二区三区| 成年人福利视频| 超在线视频97| 成人白浆超碰人人人人| 美女扒开腿让男人桶爽久久软| 精品免费一区二区三区蜜桃| 欧美日韩国产综合新一区 | 成人网址大全| 色av吧综合网| 狠狠色丁香九九婷婷综合五月| 日本在线观看网站| 国产免费一区视频观看免费 | 国产精品视频专区| 国产精品嫩草久久久久| 亚洲网站免费| 精品少妇人欧美激情在线观看| 日韩电影中文字幕在线观看| 日本在线播放一区二区三区| 综合久久2019| 免费国产一区二区| 欧美一级艳片视频免费观看| 国产日韩欧美三级| 国产日产一区二区三区| 精品国产一区二区三区麻豆免费观看完整版 | 欧美网站在线| 国产综合在线观看| 成人免费视频观看视频| 色一情一乱一乱一91av| 91高清一区| h视频在线观看免费| 国产精品国产三级欧美二区| 精品视频一区三区九区| 在线国产精品一区| h视频在线免费观看| 丝袜足脚交91精品| 亚洲欧美在线一区二区| 99久久久国产精品免费蜜臀| 欧美成人精品一级| 免费男女羞羞的视频网站中文版 | 国产精品久久久久久婷婷天堂| 亚洲精品菠萝久久久久久久| 凹凸成人精品亚洲精品密奴| 在线看的av| 国产偷国产偷亚洲高清97cao| 91精品久久久久久久久99蜜臂| 老司机精品久久| 日本午夜大片a在线观看| 在线视频不卡国产| 俺去亚洲欧洲欧美日韩| 国产欧美精品国产国产专区 | 一本色道a无线码一区v| 在线看片日韩| 182在线播放| 人妻精品无码一区二区三区 | 97se在线视频| 欧美一区二区三区免费大片| 狠狠网亚洲精品| 视频一区在线| 国产美女极品在线| 久久综合久久久| 一区二区福利视频| 亚洲少妇中出一区| 亚洲午夜黄色| 欧美日韩美女| 成年免费网站| 欧美中日韩一区二区三区| 亚洲欧美视频在线| 国产精品久久久久精k8| 国内揄拍国内精品久久| 国产伦精品一区二区三区视频金莲| 免费大片在线观看| 91精品国产综合久久久久久蜜臀| 欧美一级在线观看| 久久精品夜色噜噜亚洲aⅴ| 91精品综合久久久久久久久久久| 性欧美1819sex性高清大胸| 欧美成人免费高清视频| 99精品99久久久久久宅男| 亚洲欧洲在线观看| 亚洲综合激情小说| 久久97超碰国产精品超碰| 日韩福利视频一区| 成人在线视频亚洲| 91网址在线播放| 精品久久久久久综合日本| 久热精品视频在线观看一区| 一本高清dvd不卡在线观看| 久久精品99国产国产精| 亚洲精品3区| 国产亚洲成av人片在线观看| 黄页在线播放| 色一情一乱一伦一区二区三区| 97久久久久久| 精品无人区乱码1区2区3区在线| 亚洲欧美另类小说| 精品影院一区二区久久久| 日韩精品久久| 自拍偷拍亚洲图片| 搞黄网站在线观看| 福利在线白白| 国产在线播放观看| 国内一区在线| 国产成人av网址| 亚洲视频在线观看| 欧美亚洲综合色| 国产精品丝袜一区| 久久精品国产一区二区三| 91精品久久久久久久久久不卡| 97精品资源在线观看| 五月婷婷视频在线观看| 99re6在线视频| 亚洲天堂第一区| 国产精品免费一区二区三区在线观看 | 男人的天堂亚洲| 免费视频国产一区| 免费高清视频在线一区| 国产高清在线看| 九七伦理97伦理手机| 国产av熟女一区二区三区| 国产一区视频观看| 国产精品九九久久久久久久| 久久国产精品视频| 日韩精品极品毛片系列视频| 欧美日韩一区二区在线视频| 一区二区国产盗摄色噜噜| 久久综合九色综合欧美就去吻| 麻豆精品视频在线观看免费| 欧美日韩蜜桃| 成人精品亚洲| 日韩欧美影院| 日本成人手机在线| 浪潮色综合久久天堂| 在线中文字幕视频观看| 国产粉嫩一区二区三区在线观看 | 成人精品国产免费网站| 老牛嫩草一区二区三区日本| 91蜜臀精品国产自偷在线| 极品国产人妖chinesets亚洲人妖| 精品久久在线| 成人看片毛片免费播放器| free欧美| 日本欧美一区| 成人免费毛片嘿嘿连载视频…|