溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Access數(shù)據(jù)庫(kù)怎么改成SQLServer數(shù)據(jù)庫(kù)

發(fā)布時(shí)間:2021-08-18 20:22:45 來(lái)源:億速云 閱讀:151 作者:chen 欄目:數(shù)據(jù)庫(kù)

本篇內(nèi)容主要講解“Access數(shù)據(jù)庫(kù)怎么改成SQLServer數(shù)據(jù)庫(kù)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Access數(shù)據(jù)庫(kù)怎么改成SQLServer數(shù)據(jù)庫(kù)”吧!

  一、改寫(xiě)前提:

  系統(tǒng)已經(jīng)安裝好SQLServer2000并且打上了SP3補(bǔ)丁;安裝好Office套件里面的Access;使用一個(gè)支持純文本編輯并且?guī)в行刑?hào)顯示的編輯器,推薦UltraEdit,當(dāng)然也可以使用FrontPage2003,不過(guò)以前的版本行號(hào)顯示不太好用。

  個(gè)人能力要求:會(huì)基本的asp語(yǔ)法、access數(shù)據(jù)庫(kù)的操作、SQLServer企業(yè)管理器的基本操作。

  二、數(shù)據(jù)庫(kù)的準(zhǔn)備

  一般來(lái)說(shuō)有兩種情況:

  1、程序提供了SQL數(shù)據(jù)庫(kù)格式:有一個(gè)MDF文件,或者提供了創(chuàng)建SQL數(shù)據(jù)庫(kù)的SQL腳本文件(后綴名為.sql)。

  假如有mdf文件,可以用企業(yè)管理器直接附加上,假如提供的是sql腳本文件,那么就先用企業(yè)管理器自己創(chuàng)建一個(gè)sql數(shù)據(jù)庫(kù),然后數(shù)據(jù)庫(kù)用企業(yè)管理器中的查詢(xún)分析器運(yùn)行這個(gè)腳本創(chuàng)建數(shù)據(jù)庫(kù)表。

  這樣建立的數(shù)據(jù)庫(kù)基本不用再去改寫(xiě)什么了。

  2、更多的是沒(méi)有提供SQL數(shù)據(jù)庫(kù)或腳本文件的,這時(shí),就要自己來(lái)做這一切了,這也是我們這個(gè)帖子主要解決的問(wèn)題。一般這樣的程序會(huì)提供一個(gè)access數(shù)據(jù)庫(kù),這樣你就用企業(yè)管理器導(dǎo)入access數(shù)據(jù)庫(kù),導(dǎo)入后需要改寫(xiě)下面一些東西:

  對(duì)照原來(lái)的access,改寫(xiě)下面的部分:

  (1)sql數(shù)據(jù)庫(kù)表是沒(méi)有自動(dòng)字段的,因此原來(lái)access中的自動(dòng)字段被轉(zhuǎn)換成了普通字段,需要手工改成標(biāo)識(shí)類(lèi)型,增量為1。

  (2)所有的時(shí)間字段,假如定義了默認(rèn)值,那么原來(lái)肯定是now(),需要改成getdate()

  (3)原來(lái)字段的默認(rèn)值一般都不會(huì)自動(dòng)引入,需要對(duì)照原表的字段手工添加。

  (4)由于數(shù)據(jù)庫(kù)的不同,access和sql的字段類(lèi)型很多轉(zhuǎn)換后就變化了,比如原來(lái)的《是否》字段會(huì)被轉(zhuǎn)換成bit或者int,備注字段被轉(zhuǎn)換成longtext,text字段轉(zhuǎn)換成varchar等等,一般來(lái)說(shuō)不會(huì)影響程序運(yùn)行,假如有問(wèn)題,我們?cè)谙旅娴某绦蚋膶?xiě)部分再說(shuō)。

  (5)假如你要用一個(gè)ForSQL的程序,里面用到了存儲(chǔ)過(guò)程,那么你應(yīng)該有這個(gè)程序本身建立SQL數(shù)據(jù)庫(kù)的方法:有其本身的SQL數(shù)據(jù)庫(kù)文件,或者sql腳本;假如沒(méi)有的話,采用導(dǎo)入access數(shù)據(jù)庫(kù)的方式是無(wú)法建立存儲(chǔ)過(guò)程的,這樣你最好放棄這個(gè)ForSQL的程序版本,使用同樣版本的ForAccess的程序,導(dǎo)入access數(shù)據(jù)庫(kù),然后用下面的改寫(xiě)方法自己改成SQL版本的程序。

  三、連接字符串的改寫(xiě)

  可參考動(dòng)網(wǎng)的這段,分別是針對(duì)access和SQL的

  DimConnStrIfIsSqlDataBase=1Then'sql數(shù)據(jù)庫(kù)連接參數(shù):數(shù)據(jù)庫(kù)名、用戶密碼、用戶名、連接名(本地用local,外地用IP)DimSqlDatabaseName,SqlPassword,SqlUsername,SqlLocalNameSqlDatabaseName="dvbbs7"SqlPassword=""SqlUsername="dvbbs"SqlLocalName="(local)"ConnStr="Provider=Sqloledb;UserID="&SqlUsername&";Password="&SqlPassword&";InitialCatalog="&SqlDatabaseName&";DataSource="&SqlLocalName&";"Else'免費(fèi)用戶第一次使用請(qǐng)修改本處數(shù)據(jù)庫(kù)地址并相應(yīng)修改data目錄中數(shù)據(jù)庫(kù)名稱(chēng),如將dvbbs6.mdb修改為dvbbs6.aspDb="data/fengerqingqing.mdb"ConnStr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.MapPath(db)EndIfOnErrorResumeNextSetconn=Server.CreateObject("ADODB.Connection")conn.openConnStr當(dāng)然你使用SQL的話,有關(guān)access的使用語(yǔ)句可以刪除,就是else后面到onerrorresumenext前面,變成這樣:DimConnStr'sql數(shù)據(jù)庫(kù)連接參數(shù):數(shù)據(jù)庫(kù)名、用戶密碼、用戶名、連接名(本地用local,外地用IP)DimSqlDatabaseName,SqlPassword,SqlUsername,SqlLocalNameSqlDatabaseName="dvbbs7"SqlPassword=""SqlUsername="dvbbs"SqlLocalName="(local)"ConnStr="Provider=Sqloledb;UserID="&SqlUsername&";Password="&SqlPassword&";InitialCatalog="&SqlDatabaseName&";DataSource="&SqlLocalName&";"OnErrorResumeNextSetconn=Server.CreateObject("ADODB.Connection")conn.openConnStr

  也可以簡(jiǎn)潔一些,寫(xiě)成這樣:

  Setconn=Server.CreateObject("ADODB.Connection")conn.open"Provider=Sqloledb;UserID=sa;Password=1234567;InitialCatalog=dvbbs7;DataSource=(local);"

  里面的數(shù)據(jù)庫(kù)名稱(chēng)、數(shù)據(jù)源、用戶、密碼根據(jù)自己的實(shí)際情況改寫(xiě)一下。

  ASP網(wǎng)站Access數(shù)據(jù)庫(kù)改成SQLServer數(shù)據(jù)庫(kù)怎么實(shí)現(xiàn)

  四、程序的改寫(xiě)

  這也有兩種情況:

  1、假如你幸運(yùn),拿到的是ForSQL的程序,那么假如上面的數(shù)據(jù)庫(kù)建立過(guò)程沒(méi)有遇到麻煩,程序基本上就可以運(yùn)行了,出錯(cuò)的話,只是程序本身的bug,如何修改不是這個(gè)帖子討論的內(nèi)容,就不贅述了。

  2、大多數(shù)情況,程序本身是ForAccess的,與ForSQL的程序差別主要是程序中使用到的SQL查詢(xún)語(yǔ)句。注意,SQL查詢(xún)語(yǔ)句是數(shù)據(jù)庫(kù)應(yīng)用不可缺少的部分,不管是ForSQL還是ForAceess的程序使用的語(yǔ)法大體差不多,但是有一些微妙的差別,正是這些差別,造成了程序的不通用,也是我們需要修改的主要內(nèi)容。這樣一般要修改的部分如下:

  (1)時(shí)間函數(shù)的問(wèn)題:SQL數(shù)據(jù)庫(kù)的時(shí)間函數(shù)與access不同,最常見(jiàn)的是取現(xiàn)在時(shí)間的函數(shù),access是now(),SQL是getdate()。因此凡是在where子句中使用了now()的地方都要改成getdate();注意,now()函數(shù)在asp程序本身也要使用,凡是不在數(shù)據(jù)庫(kù)查詢(xún)或執(zhí)行語(yǔ)句中使用的now()函數(shù)千萬(wàn)不要改。

  (2)時(shí)間比較函數(shù):datediff('d','時(shí)間1',‘時(shí)間2’)這是access查詢(xún)用的格式,SQl中這些引號(hào)都要去掉,同時(shí)時(shí)間格式的前后可能加上了#,這也要去掉。同樣這也是指在sql語(yǔ)句中的,在asp語(yǔ)句中的要保持原樣。

  (3)空值的表示:在access中,判斷空值一般用是否=""來(lái)表示,但是這在SQL中往往出錯(cuò),假如遇到出錯(cuò)的問(wèn)題或者程序運(yùn)行不正常,可以改成如這樣判斷:where(nameisnull)

  (4)真假值判斷:access中可以用=true、=false來(lái)判斷,但是在SQL中就會(huì)出錯(cuò),因此在SQL查詢(xún)或執(zhí)行語(yǔ)句中這類(lèi)判斷要分別改成=1、=0。注意一點(diǎn):有些程序雖然寫(xiě)成=“true”,但是由于有引號(hào),所以這個(gè)字段是字符類(lèi)型的,你不能改成=1,保持原樣即可。

  以上是比較常見(jiàn)的改寫(xiě)的地方,還有一些不太常見(jiàn),假如遇到了可以在此回帖討論。

  五、程序的調(diào)試

  前面推薦使用帶有行號(hào)的編輯器,是因?yàn)樯鲜龅母膶?xiě)不大可能是直接搜索程序源碼來(lái)做,很難找全。

  我采取的方式一般這樣:數(shù)據(jù)庫(kù)改寫(xiě)完成,直接調(diào)試程序,出錯(cuò)后,看看出錯(cuò)的提示,找到相應(yīng)文件的代碼行,但是根源往往不是那行,比如出錯(cuò)的語(yǔ)句是:conn.execute(sql),但是這句本身是沒(méi)有錯(cuò)的,錯(cuò)誤原因是里面的這個(gè)sql字符串,那就向上看這個(gè)sql字符串是如何生成的,按照上面所說(shuō)的程序修改辦法修改。

  數(shù)據(jù)庫(kù)導(dǎo)入以后,自動(dòng)增加字段需要重寫(xiě),所有的數(shù)字類(lèi)型需要增加長(zhǎng)度,最好用decimal。

  所有的默認(rèn)值都丟失了。主要是數(shù)字類(lèi)型和日期類(lèi)型。

  所有now(),time(),date()要改成getdate()。

  所有datediff('d',time1,time2)要改成datediff(day,time1,time2)

  有可能一些true/false類(lèi)型不能使用,要變?yōu)?/0。

  備注類(lèi)型要通過(guò)cast(columnasvarchar)來(lái)使用。

  CursorType要改成1,也就是打開(kāi)數(shù)據(jù)庫(kù)時(shí)要給出第一個(gè)數(shù)字參數(shù)為1,否則記錄可能顯示不完整。

  isnull(rowname)要改成rowname=null

  ACCESS的數(shù)據(jù)庫(kù)中的自動(dòng)編號(hào)類(lèi)型在轉(zhuǎn)化時(shí),SQLServer并沒(méi)有將它設(shè)為自動(dòng)編號(hào)型,我們需在SQL創(chuàng)建語(yǔ)句中加上identity,表示自動(dòng)編號(hào)!

  轉(zhuǎn)化時(shí),跟日期有關(guān)的字段,SQLServer默認(rèn)為smalldatetime型,我們最好將它變?yōu)閐atetime型,因?yàn)閐atetime型的范圍比smalldatetime型大。有時(shí)用smalldatetime型時(shí),轉(zhuǎn)化失敗,而用datetime型時(shí),轉(zhuǎn)化成功。

  對(duì)此兩種數(shù)據(jù)庫(kù)進(jìn)行操作的sql語(yǔ)句不全相同,例如:在對(duì)ACCESS數(shù)據(jù)庫(kù)進(jìn)行刪除紀(jì)錄時(shí)用:"delete*fromuserwhereid=10",而對(duì)SQLSERVER數(shù)據(jù)庫(kù)進(jìn)行刪除是用:"deleteuserwhereid=10".

  日期函數(shù)不相同,在對(duì)ACCESS數(shù)據(jù)庫(kù)處理中,可用date()、time()等函數(shù),但對(duì)SQLServer數(shù)據(jù)庫(kù)處理中,只能用datediff,dateadd等函數(shù),而不能用date()、time()等函數(shù)。

  在對(duì)ACCESS數(shù)據(jù)庫(kù)處理中,sql語(yǔ)句中直接可以用一些VB的函數(shù),像cstr()函數(shù),而對(duì)SQLServer數(shù)據(jù)庫(kù)處理中,卻不能用。

到此,相信大家對(duì)“Access數(shù)據(jù)庫(kù)怎么改成SQLServer數(shù)據(jù)庫(kù)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI