日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

如何由Sybase向SQL Server移植數(shù)據(jù)庫

瀏覽:308日期:2023-11-07 15:58:24
最近參與了將一個(gè)Sybase數(shù)據(jù)庫移植到Microsoft SQL Server 2000上的項(xiàng)目,我在這一項(xiàng)目上獲得的經(jīng)驗(yàn),將對(duì)Sybase數(shù)據(jù)庫治理員把Sybase數(shù)據(jù)庫移植到SQL Server 2000平臺(tái)上有一定的幫助。 盡管二者之間的一些差別是相當(dāng)大的,例如Sybase數(shù)據(jù)庫治理系統(tǒng)中的存儲(chǔ)過程在SQL Server就不能被編譯,而其它差別則不太大。在完成這一轉(zhuǎn)換前,對(duì)腳本文件和存儲(chǔ)過程中編程邏輯的行為和結(jié)果進(jìn)行測(cè)試是很有必要的。在下面的部分中,我們將討論這二種數(shù)據(jù)庫系統(tǒng)之間的一些主要的不同點(diǎn),在移植的規(guī)劃階段,我們必須仔細(xì)研究這些區(qū)別。數(shù)據(jù)兼容模式對(duì)SQL Server 2000和Sybase之間的一些兼容性差別的一個(gè)臨時(shí)性解決方案是改變SQL Server中的數(shù)據(jù)庫兼容性級(jí)別,使之與Sybase相符。為此,我們可以使用sp_dbcmptlevel存儲(chǔ)過程。下面表中的語句和結(jié)果顯示出不同版本數(shù)據(jù)庫之間的差別:(Untitled-1)注重:1、當(dāng)兼容性模式被設(shè)置為70時(shí),下面的詞匯不能被用作對(duì)象名和標(biāo)識(shí)符:BACKUP、DENY、PRECENT、RESTORE和TOP。2、當(dāng)兼容性模式被設(shè)置為65時(shí),下面的詞匯不能被用作對(duì)象名和標(biāo)識(shí)符: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是用于檢查和改變兼容性水平的數(shù)據(jù)庫名字。@new_cmptlevel決定數(shù)據(jù)庫被設(shè)置的兼容性水平(將它設(shè)置為70、65、60,缺省值為NULL)。例如:sp_dbcmptlevel pubs這一行代碼返回下面的結(jié)果:The current compatibility level is 70.(當(dāng)前的兼容性級(jí)別為70。)現(xiàn)在我們來看一下另外一個(gè)例子:sp_dbcmptlevel pubs, 65它返回如下的結(jié)果:DBCC execution completed. (DBCC執(zhí)行結(jié)束。)果DBCC打印出錯(cuò)誤信息,則需要與系統(tǒng)治理員聯(lián)系。我們可以使用rerunsp_dbcmptlevel驗(yàn)證pubs數(shù)據(jù)庫是否修改得正確:sp_dbcmptlevel pubs它返回下面的結(jié)果:The current compatibility level is 65(當(dāng)前的兼容性級(jí)別為65。)除了上面的例子外,兼容性級(jí)別的差別還擴(kuò)展到了保留字。Sybase和SQL Server都有許多不能被用作數(shù)據(jù)庫中對(duì)象名字的的保留字,二種產(chǎn)品的保留字相似,但并不完全相同。由于能夠在Sybase中使用的對(duì)象可能不能在SQL Server中使用,這一問題使得由Sybase向SQL Server的移植憑添了許多困難。下面是在SQL Server中是保留字,而在Sybase中不是保留字的詞匯清單。注重:名字為下列清單中詞匯的Sybase數(shù)據(jù)庫中的對(duì)象在移植到SQL Server數(shù)據(jù)庫時(shí)必須換為其它名字。BACKUP COLUMN COMMITTED CONTAINS CONTAINSTABLECROSS CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USERDENY DISTRIBUTED FILE FLOPPY FREETEXTFREETEXTTABLE FULL IDENTITYCOL INNER JOIN事務(wù)治理模式Sybase SQL ServerSet chained [ on : off ] Set implicit_transactions [on : off ]在Sybase中使用下面的代碼判定事務(wù)模式:SELECT @@tranchainedGO下面是可能返回的結(jié)果:0 表明使用的是非鏈鎖式事務(wù)模式1 表明連接運(yùn)行在鏈鎖模式下在SQL Server中使用下面的代碼判定事務(wù)模式:IF (@@options & 2) > 0PRINT onELSEPRINT off下面是可能的返回結(jié)果:0 off>0 on隔離水平在一個(gè)關(guān)系數(shù)據(jù)庫這樣的多線程應(yīng)用軟件中,數(shù)據(jù)庫引擎對(duì)運(yùn)行的進(jìn)程間的數(shù)據(jù)是如何被隔離的治理是非常重要的,在表示隔離水平時(shí),Sybase和SQL Server的語法是不同的。下面的表格表明了Sybase和SQL Server在表示隔離水平時(shí)的差別。Sybase SQL Server0 READ UNCOMMITTED1 READ COMMITTED2 REPEATABLE READ3 SERIALIZABLE游標(biāo)語法二種產(chǎn)品中存儲(chǔ)過程的創(chuàng)建和執(zhí)行基本相似,但在移植時(shí),游標(biāo)語句中的一些例外是我們應(yīng)當(dāng)注重的。下面是一個(gè)例子: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數(shù)據(jù)庫使用@SQLSTATUS而不是@@ FETCH_STATUS */BEGINFETCH FROM mycursor INTO @lname, @fname/*** 這里應(yīng)當(dāng)是一些業(yè)務(wù)邏輯*/ENDCLOSE mycursorDEALLOCATE /* Sybase數(shù)據(jù)庫在這里需要CURSOR這個(gè)詞 * / mycursorSybase SQL ServerFetch命令執(zhí)行成功 0 0Fetch命令執(zhí)行失敗 1 -2沒有可存取的記錄了 2 -1退回觸發(fā)器SQL Server中不存在這個(gè)命令,因此在向SQL Server移植時(shí),使用了ROLLBACK TRIGGER命令的Sybase存儲(chǔ)過程必須被進(jìn)行修改。在修改帶有觸發(fā)器的數(shù)據(jù)庫表中的數(shù)據(jù)時(shí),使用ROLLBACK TRIGGER命令輕易引起誤解,一個(gè)ROLLBACK TRIGGER命令只退回觸發(fā)器以及觸發(fā)觸發(fā)器的數(shù)據(jù)修改,假如已經(jīng)被提交了,則事務(wù)的其它部分會(huì)繼續(xù),被寫到數(shù)據(jù)庫中。因此,事務(wù)中的所有語句可能沒有被成功地完成,但數(shù)據(jù)已經(jīng)被提交了。下面是Sybase數(shù)據(jù)庫中一個(gè)使用ROLLBACK TRIGGER的樣例觸發(fā)器: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的數(shù)據(jù)也被作為審計(jì)行插入table2中,假如a = 100,ROLLBACK TRIGGER命令被觸發(fā),而INSERT命令沒有被觸發(fā),批命令的其它部分繼續(xù)執(zhí)行,這時(shí)會(huì)出現(xiàn)錯(cuò)誤信息,表明在一個(gè)INSERT命令中出現(xiàn)了錯(cuò)誤。下面是所有的INSERT命令:BEGIN TRANINSERT INTO table1 valueS (1, 1)INSERT INTO table1 valueS (100,2)INSERT INTO table1 valueS (3, 3)GOSELECT * FROM table1在執(zhí)行這些命令后,table1和table2二個(gè)數(shù)據(jù)庫表將各有2個(gè)記錄,Table1表中的值為1,1以及3,3,由于ROLLBACK TRIGGER命令,第二個(gè)INSERT命令沒有執(zhí)行;Table2表中的值為1,(當(dāng)前日期)以及3,(當(dāng)前日期),由于當(dāng)a = 100時(shí)ROLLBACK TRIGGER被觸發(fā),觸發(fā)器中的所有處理被中止,100沒有被插入到Table2表中。在SQL Server中模擬這一操作需要更多的代碼,外部的事務(wù)必須與保存點(diǎn)同時(shí)使用,如下所示: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這一觸發(fā)器以一個(gè)存儲(chǔ)點(diǎn)開始,ROLLBACK TRANSACTION只退回觸發(fā)邏輯,而不是整個(gè)事務(wù)(規(guī)模要小于Sybases數(shù)據(jù)庫中的ROLLBACK TRIGGER語句。對(duì)批命令的修改如下: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我們可以發(fā)現(xiàn),改變不可謂不大。由于ROLLBACK TRIGGER命令能夠使任何批命令不能成功執(zhí)行,因此在移植的SQL Server存儲(chǔ)過程代碼中必須包括另外的邏輯,根據(jù)ROLLBACK TRIGGER的使用,這可能是一個(gè)艱巨而必要的任務(wù),沒有什么捷徑可走。假如在移植后所有的ROLLBACK TRIGGER命令被改變?yōu)镽OLLBACK TRANSACTION,觸發(fā)器的執(zhí)行也會(huì)發(fā)生變化,因此我們應(yīng)當(dāng)十分小心。命令優(yōu)化SQL Server能夠?qū)ELECT、INSERT、UPDATE和DELETE命令進(jìn)行優(yōu)化,Sybase數(shù)據(jù)庫則只支持對(duì)SELECT命令進(jìn)行優(yōu)化。下面是SQL Server和Sybase在GUI方面的對(duì)比:Sybase SQL Server使用被稱作SHOWPLAN的基于文本的查詢分析工具 使用Query Analyzer。在ISQL中啟動(dòng)SHOWPLAN的命令按鈕 多Query Analyzer中啟動(dòng)SHOWPLAN_ALL或 SHOWPLAN_TEXT的命令SET SHOWPLAN ON SET SHOWPLAN_ALLGO GO臨時(shí)數(shù)據(jù)庫表的名字表名字的類型  最大長度SQL Server表名字 128SQL Server臨時(shí)表名字 116Sybase表名字  30Sybase臨時(shí)表名字  13數(shù)據(jù)類型數(shù)據(jù)類型 Sybase SQL Serverchar(n) 255 8000varchar(n) 255 8000nchar(n) 255 4000nvarchar(n) 255 4000binary 255 8000varbinary 255 8000注重:1)SQL Server中的bit類型數(shù)據(jù)的值可以被設(shè)置為0、1或NULL。2) Sybase中的bit類型數(shù)據(jù)的值不可以被設(shè)置為NULL。同一性列Sybase SQL ServerNumeric(x,0) Tinyint,smallint,int,decimal(x,0) or numeric(x,0)打印語法在進(jìn)行移植時(shí),所有使用替換語法的打印語句必須被改變?yōu)镽AISERROR語句。結(jié)論將Sybase數(shù)據(jù)庫轉(zhuǎn)換為SQL Server數(shù)據(jù)庫并非是不可能的,但二種產(chǎn)品之間存在許多差異,在轉(zhuǎn)換時(shí)需要加以解決。根據(jù)應(yīng)用程序的規(guī)模,這種轉(zhuǎn)換可能需要大量的時(shí)間。盡管無需重新編寫所有的應(yīng)用程序,但需要完成的工作并不少。我目前還沒有發(fā)現(xiàn)這二種數(shù)據(jù)庫間轉(zhuǎn)換的更簡(jiǎn)單的方法。由于二種產(chǎn)品在許多方面都非常相似,我們非常輕易成功地將Sybase數(shù)據(jù)庫轉(zhuǎn)換為SQL Server數(shù)據(jù)。 ;
標(biāo)簽: Sql Server 數(shù)據(jù)庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧洲精品一区二区三区| 久久国产精品久久w女人spa| 99在线精品免费视频九九视 | 国产精品a级| 日本va欧美va精品发布| 日韩av一区二| 国产精品调教视频| 另类欧美日韩国产在线| 久久亚洲人体| 日韩国产综合| 中文字幕高清在线播放| 丰满少妇一区| 成人亚洲欧美| 亚洲特级毛片| 蜜臀久久99精品久久久画质超高清 | 国产欧美丝祙| 国产一区二区三区日韩精品| av免费不卡国产观看| 亲子伦视频一区二区三区| 免费av一区二区三区四区| 日韩精品一区二区三区中文在线| 亚洲精品精选| 国产精品久久久久久妇女| 国产中文字幕一区二区三区| 欧美日韩一二三四| 一区二区电影| 久久99视频| 久久婷婷一区| 亚洲精品国产精品粉嫩| 麻豆精品视频在线| 欧美综合另类| 日本中文字幕不卡| 国产在线视频欧美一区| 久久国产成人午夜av影院宅| 热久久国产精品| 毛片不卡一区二区| 日韩av首页| 亚洲精品福利| 国产一区二区三区视频在线| 伊人久久亚洲热| 欧美精品影院| 久久人人精品| 欧美自拍一区| 日韩欧美一区二区三区免费观看| 亚洲深夜影院| 欧美精品第一区| 狠狠久久婷婷| 欧美国产另类| 夜久久久久久| 精品国产三区在线| 久久亚洲美女| 麻豆精品少妇| 中文精品电影| 岛国av免费在线观看| 国产精品外国| 精品美女视频 | 蜜臀a∨国产成人精品| 久久精品国产网站| 最新亚洲一区| 精品99在线| 综合一区在线| 日韩福利一区| 7777精品| 好看的亚洲午夜视频在线| 久久精品凹凸全集| 国产在线日韩| 国产高清精品二区| 日韩中文字幕一区二区三区| 国产拍在线视频| 欧美日韩夜夜| 在线亚洲自拍| 亚洲综合在线电影| 国产精选一区| 亚洲视频国产| 亚洲午夜91| 成人午夜网址| 欧美日韩网址| 亚洲专区视频| 欧美 日韩 国产一区二区在线视频 | 日本在线成人| 亚洲自拍另类| 欧美日中文字幕| 福利一区二区三区视频在线观看| 日韩精品视频网| 视频一区中文字幕国产| 亚洲伦乱视频| 国产一区二区三区久久久久久久久| 日韩国产一二三区| 视频一区二区三区中文字幕| 久久精品青草| 国产在线观看91一区二区三区| 日韩免费精品| 亚洲自拍另类| 不卡av一区二区| 成人美女视频| 国产一区二区三区四区| 国产黄色精品| 国产伦理一区| 日本午夜精品久久久| 热久久免费视频| 午夜亚洲福利在线老司机| 日韩精品一区二区三区免费观看| 九九久久国产| 欧美精品第一区| 国产欧美日韩精品高清二区综合区| 日韩在线一二三区| 午夜免费一区| 999国产精品永久免费视频app| 久久久久久婷| 精品三级国产| 国产极品模特精品一二| 国产精品美女午夜爽爽| 日韩国产欧美在线视频| 亚洲另类黄色| 中文字幕亚洲在线观看| 亚洲精品护士| 亚洲欧洲av| 日本在线视频一区二区| 五月国产精品| 亚洲精品第一| 日韩不卡在线观看日韩不卡视频| 丝袜美腿亚洲色图| 蜜臀国产一区二区三区在线播放 | 韩国女主播一区二区三区| 久久精品国产网站| 精品一区二区三区中文字幕视频| 你懂的亚洲视频| 精品视频亚洲| 涩涩av在线| 欧美日一区二区| 亚洲激情国产| 久久亚洲美女| 日韩三级久久| 日韩欧美激情电影| 国产精品宾馆| 久久久久久一区二区| 人人精品亚洲| 99re国产精品| 日本在线不卡视频| 国产高清精品二区| 日韩大片在线播放| 午夜精品亚洲| 亚洲资源在线| 国产欧美一区| 精品一级视频| 日韩电影免费网址| 亚洲一区二区三区四区五区午夜| 免费看日韩精品| 欧美日韩精品一区二区三区在线观看| 国产精品一国产精品k频道56| 精品国产18久久久久久二百| 亚洲成人va| 久久亚洲欧洲| 久久av网址| 久久久久久久久99精品大| 国产精品社区| 国产精品theporn| 日韩精品看片| 蜜臀久久99精品久久久久久9| 国产欧美欧美| 日韩精品免费一区二区在线观看| 久久国产精品久久w女人spa| 欧美日韩在线精品一区二区三区激情综合| 欧美日韩 国产精品| 国产v日韩v欧美v| 国产精品毛片在线看| 欧美啪啪一区| 三级精品视频| 日韩欧美精品一区二区综合视频| 精品国产欧美日韩一区二区三区| 欧美精品一区二区三区精品| 日本aⅴ免费视频一区二区三区| 国产一区二区三区日韩精品| 日韩视频在线一区二区三区 | 99久久精品网站| 亚洲男人在线| 国产精品成人一区二区不卡| 亚洲一区激情| 精品国产欧美日韩| 亚洲欧美日韩一区在线观看| 久久精品一区二区国产| 欧美天堂亚洲电影院在线观看| 国产精品va视频| 伊人久久婷婷| 久久久久伊人| 日av在线不卡| 成人福利视频| 日本成人在线视频网站| 日韩久久精品| 国产日韩欧美一区在线| 亚洲精品国产偷自在线观看| 欧美精品97| 中文久久精品| 激情国产在线| 青青草国产成人99久久| 亚洲电影有码| 美女精品一区二区| 视频一区日韩精品| 久久精品国产www456c0m| 热久久久久久|