SQL Server與Access數(shù)據(jù)庫(kù)ASP代碼的比較詳解
在用ASP開(kāi)發(fā)網(wǎng)站時(shí),后臺(tái)數(shù)據(jù)庫(kù)的選擇常常有兩種,一種是SQL Server,另一種就是Access,那么這兩種數(shù)據(jù)庫(kù)在ASP開(kāi)發(fā)網(wǎng)站的過(guò)程中有什么不同的地方嗎?本文我們就來(lái)介紹這一部分內(nèi)容,希望能夠?qū)δ兴鶐椭?/p>
后臺(tái)數(shù)據(jù)庫(kù):[Microsoft Access]與[Microsoft Sql Server]更換之后,ASP代碼應(yīng)注意要修改的一些地方:
一、連接問(wèn)題(舉例)
- [Microsoft Access]
- constr = "DBQ=c:\data\clwz.mdb; DRIVER={Microsoft Access Driver (*.mdb)}"
- [Microsoft Sql Server]
- constr = "DRIVER={SQL Server};SERVER=host;DATABASE=mydata;uid=sa;pwd="
二、相似函數(shù)(舉例)
[1]DATEDIFF(datepart, startdate, enddate),其中“datepart”參數(shù)可選項(xiàng)如下:
- 設(shè)置 描述
- ————————————
- [Microsoft Access]
- 年 yyyy
- 季度 q
- 月 m
- 一年的日數(shù) y
- 日 d
- 一周的日數(shù) w
- 周 ww
- 小時(shí) h
- 分鐘 n
- 秒 s
- [Microsoft Sql Server]
- year yy, yyyy
- quarter qq, q
- month mm, m
- dayofyear dy, y
- day dd, d
- week wk, ww
- hour hh
- minute mi, n
- second ss, s
- millisecond ms
基本上差不多,但注意的是在寫(xiě)的時(shí)候,[Microsoft Access]要加引號(hào),如:datediff('d',enddate,'2004/08/01'),[Microsoft Sql Server]則不需要,如:datediff(d,enddate,'2004/08/01')
[2][Microsoft Access]中可用如cstr等轉(zhuǎn)數(shù)據(jù)類型函數(shù),而[Microsoft Sql Server]中則用convert或cast函數(shù),如:convert(varchar,[amount])等。
[3][Microsoft Sql Server]取當(dāng)前時(shí)間用getdate等等...
三、語(yǔ)句
[Microsoft Sql Server]可以用
- CASE
- WHEN THEN
- WHEN THEN
- ...
- ELSE
- END
語(yǔ)句,而[Microsoft Access]不支持。[Microsoft Access]也不支持between語(yǔ)句,[Microsoft Sql Server]則可以這樣寫(xiě):[date] between @date1 and @date2。
四、查詢表
[Microsoft Sql Server]可三個(gè)及以上表join查詢,而[Microsoft Access]好像只能兩個(gè)表聯(lián)接查詢(待權(quán)威確認(rèn)),而且[Microsoft Sql Server]可用“*=”和“=*”連接符。
五、除零問(wèn)題
[Microsoft Access]在碰到除數(shù)為零時(shí),自動(dòng)丟掉相關(guān)記錄,而[Microsoft Sql Server]則會(huì)報(bào)錯(cuò),且查詢中止。刪除代碼:[Microsoft Access]可以這樣寫(xiě):delete * from [table],[Microsoft SQL Server]只能這樣寫(xiě):delete from [table]多*會(huì)報(bào)錯(cuò)。
當(dāng)前日期:[Microsoft Access]用date(),[Microsoft SQL Server],用getdate()如果數(shù)據(jù)庫(kù)可能會(huì)更換類型的話,可以在ASP代碼中加上如這樣:
- if inStr(constr,"Microsoft Access") > 0 then
- sqlstr=[Microsoft Access][sql代碼]
- else
- sqlstr=[Microsoft Sql Server][sql代碼]
- end if
這樣即使改了數(shù)據(jù)庫(kù),也不用改數(shù)據(jù)庫(kù)查詢更新代碼了。再加:access中有true、false的字段記錄,而sql里只有smallint,對(duì)應(yīng)如果在access里有“字段名=true”的,在sql里要改成“字段名=1” ,網(wǎng)上大部分的免費(fèi)asp程序使用的是access數(shù)據(jù)庫(kù)。但是access數(shù)據(jù)庫(kù)作為一個(gè)中小型的單機(jī)數(shù)據(jù)庫(kù)系統(tǒng),在承擔(dān)訪問(wèn)量、數(shù)據(jù)量大的網(wǎng)站應(yīng)用時(shí),往往就不堪重負(fù)了。
一般認(rèn)為,超過(guò)50M的access數(shù)據(jù)庫(kù)性能就開(kāi)始明顯下降,超過(guò)100M以后,出錯(cuò)、運(yùn)行慢的問(wèn)題會(huì)更加突出。盡管可以如動(dòng)網(wǎng)7.0以后那樣,從程序的角度盡量?jī)?yōu)化以圖提高性能,但是不能從根本上解決問(wèn)題。這時(shí)也許使用微軟的SQL Server數(shù)據(jù)庫(kù)就是最可能的辦法,當(dāng)然也可以使用其它的如Oracle、MySQL等等,但是作為改寫(xiě)來(lái)說(shuō),由于同為微軟的產(chǎn)品,改寫(xiě)成SQL Server應(yīng)該是最省力的辦法。
關(guān)于SQL Server與Access數(shù)據(jù)庫(kù)ASP代碼的比較的相關(guān)知識(shí)就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!
【編輯推薦】






