Access轉(zhuǎn)SQL Server數(shù)據(jù)庫的經(jīng)驗漫談
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
以下的文章主要描述的是access轉(zhuǎn)sql server數(shù)據(jù)庫的幾個經(jīng)驗漫談,access數(shù)據(jù)庫作為一個中小型的單機(jī)數(shù)據(jù)庫系統(tǒng),在承擔(dān)訪問量、數(shù)據(jù)量大的網(wǎng)站應(yīng)用時,往往就不堪重負(fù)了。一般認(rèn)為。
超過50m的access數(shù)據(jù)庫性能就開始明顯下降,超過100m以后,出錯、運(yùn)行慢的問題會更加突出。而我的blog數(shù)據(jù)庫已達(dá)到了四百多兆,痛定思痛,決定升級為sql server 2005。
這其中,走了好些彎路,起初我是直接利用企業(yè)管理器把a(bǔ)ccess導(dǎo)入sql中,發(fā)現(xiàn)sqll數(shù)據(jù)庫表是沒有自動字段的,原來access中的自動字段被轉(zhuǎn)換成了普通字段,需要手工改成標(biāo)識類型,增量為1。 所有的時間字段,如果定義了默認(rèn)值,那么原來是now(),現(xiàn)在需要改成getdate() 。原來字段的默認(rèn)值都不會自動引入,需要對照原表的字段手工添加。注釋在access項目或sqlserver數(shù)據(jù)庫中,前綴“n”代表“國家/地區(qū)”,意思是這個數(shù)據(jù)類型是啟用unicode的。在access數(shù)據(jù)庫中,全部文本列在默認(rèn)情況下都是啟用unicode的。真費(fèi)了我,好些光景。
如此這般數(shù)據(jù)庫可以調(diào)用,程序?qū)⒕椭苓\(yùn)行了,但發(fā)現(xiàn),原來的程序運(yùn)行起來錯誤百出。
原來,access與sql程序中使用到的sql查詢語句大體差不多,但是有一些微妙的差別,正是這些差別,造成了程序的不通用,一般要修改的部分如下:
(1)時間函數(shù)的問題:sql數(shù)據(jù)庫的時間函數(shù)與access不同,最常見的是取現(xiàn)在時間的函數(shù),access是now(),sql是getdate()。因此凡是在where子句中使用了now()的地方都要改成getdate();注意,now()函數(shù)在asp程序本身也要使用,凡是不在sql server數(shù)據(jù)庫查詢或執(zhí)行語句中使用的now()函數(shù)千萬不要改。
(2)時間比較函數(shù):datediff('d','時間1',‘時間2’)這是access查詢用的格式,sql中這些引號都要去掉,同時時間格式的前后可能加上了#,這也要去掉。同樣這也是指在sql語句中的,在asp語句中的要保持原樣。
(3)空值的表示:在access中,判斷空值一般用是否=""來表示,但是這在sql中往往出錯,如果遇到出錯的問題或者程序運(yùn)行不正常,可以改成如這樣判斷:where (name is null)
(4)真假值判斷:access中可以用=true、=false來判斷,但是在sql中就會出錯,因此在sql查詢或執(zhí)行語句中這類判斷要分別改成=1、=0。注意一點(diǎn):有些程序雖然寫成=“true”,但是由于有引號,所以這個字段是字符類型的,你不能改成=1,保持原樣即可。
(5)在對access數(shù)據(jù)庫進(jìn)行刪除紀(jì)錄時用:"delete * from user where id=10",而對sql server數(shù)據(jù)庫進(jìn)行刪除是用:"delete user where id=10"。
(6)在對access數(shù)據(jù)庫處理中,sql語句中直接可以用一些vb的函數(shù),像cstr()函數(shù),而對sql server數(shù)據(jù)庫處理中,卻不能用。
調(diào)試程序經(jīng)常遇到的出錯的語句是:conn.execute(sql),注意這句本身是沒有錯的,錯誤原因是里面的這個sql字符串,要向上看這個sql字符串是如何生成的,按照上面所說的程序修改辦法修改。
最后向大家推薦一款工具,可以直接生成生成升遷 sql腳本,保存為 *.sql文件后,sql2000的查詢分析器里調(diào)入執(zhí)行,可以生成升遷 asp腳本,這樣你可以用該腳本和相應(yīng)mdb數(shù)據(jù)庫上傳到服務(wù)器在線升遷,可以直接執(zhí)行access數(shù)據(jù)導(dǎo)入到sql服務(wù)器(表結(jié)構(gòu)和數(shù)據(jù))。 程序下載:coosel2.0 createsql v1.06
程序編制: v37 paintblue.net (2004-11-20)
版權(quán)所有: paintblue.net │ blueidea.com
無論商業(yè)還是免費(fèi),你可以自由使用 1.access的數(shù)據(jù)庫中的自動編號類型在轉(zhuǎn)化時,sql server并沒有將它設(shè)為自動編號型,我們需在sql創(chuàng)建語句中加上identity,表示自動編號!
2.轉(zhuǎn)化時,跟日期有關(guān)的字段,sql server默認(rèn)為smalldatetime型,我們最好將它變?yōu)閐atetime型,因為datetime型的范圍比smalldatetime型大。我遇見這種情況,用smalldatetime型時,轉(zhuǎn)化失敗,而用datetime型時,轉(zhuǎn)化成功。
3.對此兩種數(shù)據(jù)庫進(jìn)行操作的sql語句不全相同,例如:在對access數(shù)據(jù)庫進(jìn)行刪除紀(jì)錄時用:"delete * from user where id=10",而對sqlserver數(shù)據(jù)庫進(jìn)行刪除是用:"delete user where id=10".
4.日期函數(shù)不相同,在對access數(shù)據(jù)庫處理中,可用date()、time()等函數(shù),但對sql server數(shù)據(jù)庫處理中,只能用datediff,dateadd等函數(shù),而不能用date()、time()等函數(shù)。
5.在對access數(shù)據(jù)庫處理中,sql語句中直接可以用一些vb的函數(shù),像cstr()函數(shù),而對sql server數(shù)據(jù)庫處理中,卻不能用。 該文章在 2010/7/31 15:41:19 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |