成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:270日期:2023-11-07 15:58:24
最近參與了將一個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 CONTAINSTABLECROSS CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USERDENY DISTRIBUTED FILE FLOPPY FREETEXTFREETEXTTABLE FULL IDENTITYCOL INNER JOIN事務治理模式Sybase SQL ServerSet chained [ on : off ] Set implicit_transactions [on : off ]在Sybase中使用下面的代碼判定事務模式:SELECT @@tranchainedGO下面是可能返回的結果:0 表明使用的是非鏈鎖式事務模式1 表明連接運行在鏈鎖模式下在SQL Server中使用下面的代碼判定事務模式:IF (@@options & 2) > 0PRINT onELSEPRINT off下面是可能的返回結果:0 off>0 on隔離水平在一個關系數據庫這樣的多線程應用軟件中,數據庫引擎對運行的進程間的數據是如何被隔離的治理是非常重要的,在表示隔離水平時,Sybase和SQL Server的語法是不同的。下面的表格表明了Sybase和SQL Server在表示隔離水平時的差別。Sybase SQL Server0 READ UNCOMMITTED1 READ COMMITTED2 REPEATABLE READ3 SERIALIZABLE游標語法二種產品中存儲過程的創建和執行基本相似,但在移植時,游標語句中的一些例外是我們應當注重的。下面是一個例子:CREATE PROCEDURE sql_cursor ASDECLARE @lname char(20), @fname char(20)DECLARE mycursor CURSOR FORSELECT au_lname, au_fname FROM authorsOPEN mycursorFETCH FROM mycursor INTO @lname, @fnameWHILE @@ FETCH_STATUS = 0/* Sybase數據庫使用@SQLSTATUS而不是@@ FETCH_STATUS */BEGINFETCH FROM mycursor INTO @lname, @fname/*** 這里應當是一些業務邏輯*/ENDCLOSE mycursorDEALLOCATE /* Sybase數據庫在這里需要CURSOR這個詞 * / mycursorSybase SQL ServerFetch命令執行成功 0 0Fetch命令執行失敗 1 -2沒有可存取的記錄了 2 -1退回觸發器SQL Server中不存在這個命令,因此在向SQL Server移植時,使用了ROLLBACK TRIGGER命令的Sybase存儲過程必須被進行修改。在修改帶有觸發器的數據庫表中的數據時,使用ROLLBACK TRIGGER命令輕易引起誤解,一個ROLLBACK TRIGGER命令只退回觸發器以及觸發觸發器的數據修改,假如已經被提交了,則事務的其它部分會繼續,被寫到數據庫中。因此,事務中的所有語句可能沒有被成功地完成,但數據已經被提交了。下面是Sybase數據庫中一個使用ROLLBACK TRIGGER的樣例觸發器:CREATE TABLE table1 (a int, b int)GOCREATE TRIGGER trigger1 on table1 FOR INSERTASIF EXISTS (SELECT 1 FROM inserted WHERE a = 100)BEGINROLLBACK TRIGGER with RAISERROR 50000 Invalid value for column aENDINSERT INTO table2SELECT a, GETDATE() from insertedRETURNGO在上面的代碼中,除非a = 100,則所有插入table1的數據也被作為審計行插入table2中,假如a = 100,ROLLBACK TRIGGER命令被觸發,而INSERT命令沒有被觸發,批命令的其它部分繼續執行,這時會出現錯誤信息,表明在一個INSERT命令中出現了錯誤。下面是所有的INSERT命令:BEGIN TRANINSERT INTO table1 valueS (1, 1)INSERT INTO table1 valueS (100,2)INSERT INTO table1 valueS (3, 3)GOSELECT * 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 INSERTASSAVE TRAN trigger1IF EXISTS (SELECT * FROM inserted WHERE a = 100)BEGINROLLBACK TRAN trigger1RAISERROR 50000 ROLLBACKENDINSERT INTO table2SELECT a, GETDATE() FROM insertedGO這一觸發器以一個存儲點開始,ROLLBACK TRANSACTION只退回觸發邏輯,而不是整個事務(規模要小于Sybases數據庫中的ROLLBACK TRIGGER語句。對批命令的修改如下:BEGIN TRANSAVE TRAN save1INSERT INTO table1 valueS (1, 1)IF @@error = 50000ROLLBACK TRAN save1SAVE TRAN save2INSERT INTO table1 valueS (100, 1)IF @@error = 50000ROLLBACK TRAN save2SAVE TRAN save3INSERT INTO table1 valueS (3, 3)IF @@error = 50000ROLLBACK TRAN save3COMMIT TRAN我們可以發現,改變不可謂不大。由于ROLLBACK TRIGGER命令能夠使任何批命令不能成功執行,因此在移植的SQL Server存儲過程代碼中必須包括另外的邏輯,根據ROLLBACK TRIGGER的使用,這可能是一個艱巨而必要的任務,沒有什么捷徑可走。假如在移植后所有的ROLLBACK TRIGGER命令被改變為ROLLBACK TRANSACTION,觸發器的執行也會發生變化,因此我們應當十分小心。命令優化SQL Server能夠對SELECT、INSERT、UPDATE和DELETE命令進行優化,Sybase數據庫則只支持對SELECT命令進行優化。下面是SQL Server和Sybase在GUI方面的對比:Sybase SQL Server使用被稱作SHOWPLAN的基于文本的查詢分析工具 使用Query Analyzer。在ISQL中啟動SHOWPLAN的命令按鈕 多Query Analyzer中啟動SHOWPLAN_ALL或 SHOWPLAN_TEXT的命令SET SHOWPLAN ON SET SHOWPLAN_ALLGO GO臨時數據庫表的名字表名字的類型  最大長度SQL Server表名字 128SQL Server臨時表名字 116Sybase表名字  30Sybase臨時表名字  13數據類型數據類型 Sybase SQL Serverchar(n) 255 8000varchar(n) 255 8000nchar(n) 255 4000nvarchar(n) 255 4000binary 255 8000varbinary 255 8000注重:1)SQL Server中的bit類型數據的值可以被設置為0、1或NULL。2) Sybase中的bit類型數據的值不可以被設置為NULL。同一性列Sybase SQL ServerNumeric(x,0) Tinyint,smallint,int,decimal(x,0) or numeric(x,0)打印語法在進行移植時,所有使用替換語法的打印語句必須被改變為RAISERROR語句。結論將Sybase數據庫轉換為SQL Server數據庫并非是不可能的,但二種產品之間存在許多差異,在轉換時需要加以解決。根據應用程序的規模,這種轉換可能需要大量的時間。盡管無需重新編寫所有的應用程序,但需要完成的工作并不少。我目前還沒有發現這二種數據庫間轉換的更簡單的方法。由于二種產品在許多方面都非常相似,我們非常輕易成功地將Sybase數據庫轉換為SQL Server數據。 ;
標簽: Sql Server 數據庫
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲欧美影音先锋| 久久精品一区二区三区中文字幕| 国产欧美一区二区三区另类精品 | 午夜成人免费视频| 亚洲精品一区二区三| 国产精品成人一区二区艾草| 91在线观看污| 欧美一二三区在线观看| 国产一区不卡在线| 欧美高清精品3d| 国产尤物一区二区在线 | 国产精品成人免费精品自在线观看 | 日韩国产精品久久| 色综合久久久久综合体桃花网| 天天操天天综合网| 色av一区二区| 免费高清成人在线| 欧美日韩一区在线| 国产成人精品免费视频网站| 91麻豆精品国产91久久久 | 亚洲欧美日本日韩| 亚洲国产中文字幕| 久久久久久一区| 偷拍与自拍一区| 一本大道久久精品懂色aⅴ| 免费看日韩a级影片| 欧美三级电影精品| 国产一区二区不卡在线| 制服丝袜亚洲色图| 成人性视频免费网站| 久久久久国产成人精品亚洲午夜| 欧美高清视频一区二区三区在线观看| 国产亚洲精品福利| 亚洲国产精品一区二区第一页| 亚洲毛片av在线| 久久精品日韩| 国产麻豆精品久久一二三| 久久久蜜桃精品| 亚洲国产mv| 亚洲高清在线精品| 在线免费亚洲电影| 国产精品资源网| 久久视频一区二区| 亚洲福利av| 石原莉奈在线亚洲二区| 欧美视频在线观看一区二区| 高清成人免费视频| 中文字幕av资源一区| 一本综合久久| 精品无码三级在线观看视频| 精品国产一区二区三区久久影院| 欧美日本三区| 樱桃视频在线观看一区| 老司机精品视频网站| 高清不卡一区二区| 中文字幕一区二区三区在线不卡| 国产精品腿扒开做爽爽爽挤奶网站| 青青青伊人色综合久久| 日韩美女天天操| 国产中文一区| 亚洲成人免费av| 6080国产精品一区二区| 午夜精品亚洲一区二区三区嫩草| 亚洲激情成人在线| 欧美午夜理伦三级在线观看| 97精品久久久久中文字幕| 亚洲精品成人悠悠色影视| 欧美亚洲动漫制服丝袜| 99视频在线精品| 亚洲国产人成综合网站| 91精品国产一区二区三区蜜臀| 欧美另类女人| 日韩精品乱码av一区二区| 精品日韩欧美在线| 午夜在线视频观看日韩17c| 国产盗摄视频一区二区三区| 国产精品久久久久久久久免费丝袜| 色中色一区二区| 91小视频免费观看| 日日摸夜夜添夜夜添国产精品| 欧美xfplay| 午夜亚洲一区| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 99热在线精品观看| 日韩国产欧美在线视频| 久久影院视频免费| 久久国产99| 91亚洲精华国产精华精华液| 日韩国产在线一| 国产日产精品1区| 久久一本综合频道| 欧美激情亚洲| 麻豆成人av在线| 国产精品欧美精品| 欧美日韩国产综合久久| 在线高清一区| 国产成人av资源| 亚洲mv在线观看| 久久久99精品久久| 久久久久久一区| 色综合天天性综合| 另类小说综合欧美亚洲| 国产精品久久久久久久久搜平片| 欧美欧美午夜aⅴ在线观看| 永久域名在线精品| 成人一二三区视频| 丝袜脚交一区二区| 自拍偷在线精品自拍偷无码专区| 4hu四虎永久在线影院成人| 国产一区二区三区免费不卡 | 亚洲欧美综合| 国内精品不卡在线| 亚洲综合久久av| 久久女同性恋中文字幕| 在线观看国产一区二区| 亚洲国产午夜| 91亚洲大成网污www| 久热成人在线视频| 亚洲黄色录像片| 国产亚洲精久久久久久| 欧美日韩免费高清一区色橹橹 | 欧美在线资源| 精品午夜一区二区三区在线观看| 亚洲黄色小说网站| 国产夜色精品一区二区av| 欧美中文一区二区三区| 亚洲精品黄色| 欧美承认网站| 成人激情黄色小说| 国产在线精品一区二区| 视频在线观看91| 一区二区三区四区中文字幕| 国产日韩欧美a| 在线播放视频一区| 久久视频一区| 国产亚洲精品v| 激情五月***国产精品| 99久久99久久久精品齐齐| 国产乱人伦精品一区二区在线观看| 亚洲成a人v欧美综合天堂| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 亚洲品质自拍视频网站| 久久久久久久久蜜桃| 欧美一二三四在线| 欧美日韩国产成人在线免费| 久久中文精品| 国产精品乱子乱xxxx| 亚洲激情专区| 国模一区二区三区| 欧美理论在线| 欧美日韩在线精品一区二区三区| av在线不卡免费看| 国产99精品国产| 国产成人激情av| 丁香天五香天堂综合| 国产麻豆精品久久一二三| 激情五月播播久久久精品| 久久精品免费观看| 蜜桃视频一区二区三区| 日韩av电影一区| 日韩中文字幕区一区有砖一区| 亚洲一区二区四区蜜桃| 一区二区三区日韩| 亚洲小说春色综合另类电影| 亚洲午夜免费电影| 午夜久久久久久久久久一区二区| 亚洲国产一区二区视频| 亚洲一区二区欧美激情| 亚洲综合网站在线观看| 亚洲一区二区三区在线播放| 亚洲综合小说图片| 天堂va蜜桃一区二区三区漫画版| 日韩精品久久理论片| 美国十次了思思久久精品导航| 美国十次综合导航| 国产剧情一区二区| 岛国精品一区二区| 欧美成人dvd在线视频| 欧美日韩成人| 激情欧美日韩一区| 亚洲影院免费| 色偷偷成人一区二区三区91| 欧美在线你懂的| 91麻豆精品国产91久久久使用方法 | 精品国产免费视频| 国产清纯美女被跳蛋高潮一区二区久久w| 久久久精品综合| 国产精品热久久久久夜色精品三区| 国产精品福利影院| 一区二区三区欧美亚洲| 亚洲成av人在线观看| 日韩激情视频网站| 国精产品一区一区三区mba视频 | 国产精品亲子乱子伦xxxx裸| 亚洲日本欧美天堂| 日本视频中文字幕一区二区三区| 精彩视频一区二区三区| 国v精品久久久网| 国产精品国产一区二区| 国产视频一区免费看|