国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Access與Sql Server之ASP代碼比較

2019-11-18 16:44:32
字體:
供稿:網(wǎng)友

后臺(tái)數(shù)據(jù)庫
[Microsoft access]

[Microsoft Sql Server]
更換之后,asp代碼應(yīng)注意要修改的一些地方:

[一]連接問題(舉例)
[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

-------------------------

基本上差不多,但注意的是在寫的時(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等等...

[三]語句
[Microsoft Sql Server]
可以用
CASE
WHEN THEN
WHEN THEN
...
ELSE
END
語句,而
[Microsoft Access]
不支持。
[Microsoft Access]也不支持between語句
[Microsoft Sql Server]則可以這樣寫:
[date] between @date1 and @date2
[四]查詢表
[Microsoft Sql Server]
可三個(gè)及以上表join查詢,而
[Microsoft Access]
好像只能兩個(gè)表聯(lián)接查詢(待權(quán)威確認(rèn)),
而且[Microsoft Sql Server]可用“*=”和“=*”連接符。[五]除零問題
[Microsoft Access]
在碰到除數(shù)為零時(shí),自動(dòng)丟掉相關(guān)記錄,而
[Microsoft Sql Server]
則會(huì)報(bào)錯(cuò),且查詢中止。刪除代碼:
[Microsoft Access]
可以這樣寫:delete * from [table]
[Microsoft SQL Server]
只能這樣寫:delete from [table]
多*會(huì)報(bào)錯(cuò)
_____________________________________
當(dāng)前日期:
[Microsoft Access]
用date()
[Microsoft SQL Server]
用getdate()如果數(shù)據(jù)庫可能會(huì)更換類型的話,可以
在ASP代碼中加上如這樣:
if inStr(constr,"Microsoft Access") > 0 then
sqlstr=[Microsoft Access][sql代碼]
else
sqlstr=[Microsoft Sql Server][sql代碼]
end if
(constr--連接字符串)
這樣即使改了數(shù)據(jù)庫,也不用改數(shù)據(jù)庫查詢更新代碼了。
再加:access中有true、false的字段記錄,而sql里只有smallint,對應(yīng)如果在access里有“字段名=true”的,在sql里要改成“字段名=1”
網(wǎng)上大部分的免費(fèi)asp程序使用的是access數(shù)據(jù)庫。但是access數(shù)據(jù)庫作為一個(gè)中小型的單機(jī)數(shù)據(jù)庫系統(tǒng),在承擔(dān)訪問量、數(shù)據(jù)量大的網(wǎng)站應(yīng)用時(shí),往往就不堪重負(fù)了。一般認(rèn)為,超過50M的access數(shù)據(jù)庫性能就開始明顯下降,超過100M以后,出錯(cuò)、運(yùn)行慢的問題會(huì)更加突出。盡管可以如動(dòng)網(wǎng)7.0以后那樣,從程序的角度盡量優(yōu)化以圖提高性能,但是不能從根本上解決問題。
這時(shí)也許使用微軟的SQL Server數(shù)據(jù)庫就是最可能的辦法,當(dāng)然也可以使用其它的如OracleMySQL等等,但是作為改寫來說,由于同為微軟的產(chǎn)品,改寫成SQL Server應(yīng)該是最省力的辦法。

一、改寫前提:

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

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

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

一般來說有兩種情況:
1、程序提供了SQL數(shù)據(jù)庫格式:有一個(gè)MDF文件,或者提供了創(chuàng)建SQL數(shù)據(jù)庫的SQL腳本文件(后綴名為.sql)。
如果有mdf文件,可以用企業(yè)管理器直接附加上,如果提供的是sql腳本文件,那么就先用企業(yè)管理器自己創(chuàng)建一個(gè)sql數(shù)據(jù)庫,然后數(shù)據(jù)庫用企業(yè)管理器中的查詢分析器運(yùn)行這個(gè)腳本創(chuàng)建數(shù)據(jù)庫表。
這樣建立的數(shù)據(jù)庫基本不用再去改寫什么了。
2、更多的是沒有提供SQL數(shù)據(jù)庫或腳本文件的,這時(shí),就要自己來做這一切了,這也是我們這個(gè)帖子主要解決的問題。一般這樣的程序會(huì)提供一個(gè)access數(shù)據(jù)庫,這樣你就用企業(yè)管理器導(dǎo)入access數(shù)據(jù)庫,導(dǎo)入后需要改寫下面一些東西:
對照原來的access,改寫下面的部分:
(1)sql數(shù)據(jù)庫表是沒有自動(dòng)字段的,因此原來access中的自動(dòng)字段被轉(zhuǎn)換成了普通字段,需要手工改成標(biāo)識(shí)類型,增量為1。
(2)所有的時(shí)間字段,如果定義了默認(rèn)值,那么原來肯定是now(),需要改成getdate()
(3)原來字段的默認(rèn)值一般都不會(huì)自動(dòng)引入,需要對照原表的字段手工添加。
(4)由于數(shù)據(jù)庫的不同,access和sql的字段類型很多轉(zhuǎn)換后就變化了,比如原來的《是否》字段會(huì)被轉(zhuǎn)換成bit或者int,備注字段被轉(zhuǎn)換成longtext,text字段轉(zhuǎn)換成varchar等等,一般來說不會(huì)影響程序運(yùn)行,如果有問題,我們在下面的程序改寫部分再說。
(5)如果你要用一個(gè)For SQL的程序,里面用到了存儲(chǔ)過程,那么你應(yīng)該有這個(gè)程序本身建立SQL數(shù)據(jù)庫的方法:有其本身的SQL數(shù)據(jù)庫文件,或者sql腳本;如果沒有的話,采用導(dǎo)入access數(shù)據(jù)庫的方式是無法建立存儲(chǔ)過程的,這樣你最好放棄這個(gè)For SQL的程序版本,使用同樣版本的For Access的程序,導(dǎo)入access數(shù)據(jù)庫,然后用下面的改寫方法自己改成SQL版本的程序。

三、連接字符串的改寫

可參考動(dòng)網(wǎng)的這段,分別是針對access和SQL的
Dim ConnStr
If IsSqlDataBase = 1 Then
'sql數(shù)據(jù)庫連接參數(shù):數(shù)據(jù)庫名、用戶密碼、用戶名、連接名(本地用local,外地用ip
Dim SqlDatabaseName,SqlPassWord,SqlUsername,SqlLocalName
SqlDatabaseName = "dvbbs7"
SqlPassword = ""
SqlUsername = "dvbbs"
SqlLocalName = "(local)"
ConnStr = "PRovider = Sqloledb; User ID = " & SqlUsername & "; Password = " & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source = " & SqlLocalName & ";"
Else
'免費(fèi)用戶第一次使用請修改本處數(shù)據(jù)庫地址并相應(yīng)修改data目錄中數(shù)據(jù)庫名稱,如將dvbbs6.mdb修改為dvbbs6.asp
'http://www.survivalescaperooms.com/
Db = "data/fengerqingqing.mdb"
ConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath(db)
End If
On Error Resume Next
Set conn = Server.CreateObject("ADODB.Connection")
conn.open ConnStr

當(dāng)然你使用SQL的話,有關(guān)access的使用語句可以刪除,就是else后面到on error resume next前面,變成這樣:

Dim ConnStr
'sql數(shù)據(jù)庫連接參數(shù):數(shù)據(jù)庫名、用戶密碼、用戶名、連接名(本地用local,外地用IP)
Dim SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName
SqlDatabaseName = "dvbbs7"
SqlPassword = ""
SqlUsername = "dvbbs"
SqlLocalName = "(local)"
ConnStr = "Provider = Sqloledb; User ID = " & SqlUsername & "; Password = " & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source = " & SqlLocalName & ";"
On Error Resume Next
Set conn = Server.CreateObject("ADODB.Connection")
conn.open ConnStr

也可以簡潔一些,寫成這樣:
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "Provider = Sqloledb; User ID = sa; Password = 1234567; Initial Catalog = dvbbs7; Data Source = (local);"
里面的數(shù)據(jù)庫名稱、數(shù)據(jù)源、用戶、密碼根據(jù)自己的實(shí)際情況改寫一下。

四、程序的改寫

這也有兩種情況
1、如果你幸運(yùn),拿到的是For SQL的程序,那么如果上面的數(shù)據(jù)庫建立過程沒有遇到麻煩,程序基本上就可以運(yùn)行了,出錯(cuò)的話,只是程序本身的bug,如何修改不是這個(gè)帖子討論的內(nèi)容,就不贅述了。
2、大多數(shù)情況,程序本身是For Access的,與For SQL的程序差別主要是程序中使用到的SQL查詢語句。注意,SQL查詢語句是數(shù)據(jù)庫應(yīng)用不可缺少的部分,不管是For SQL還是For Aceess的程序使用的語法大體差不多,但是有一些微妙的差別,正是這些差別,造成了程序的不通用,也是我們需要修改的主要內(nèi)容。這樣一般要修改的部分如下:
(1)時(shí)間函數(shù)的問題:SQL數(shù)據(jù)庫的時(shí)間函數(shù)與access不同,最常見的是取現(xiàn)在時(shí)間的函數(shù),access是now(),SQL是getdate()。因此凡是在where子句中使用了now()的地方都要改成getdate();注意,now()函數(shù)在asp程序本身也要使用,凡是不在數(shù)據(jù)庫查詢或執(zhí)行語句中使用的now()函數(shù)千萬不要改。
(2)時(shí)間比較函數(shù):datediff('d','時(shí)間1',‘時(shí)間2’)這是access查詢用的格式,SQl中這些引號(hào)都要去掉,同時(shí)時(shí)間格式的前后可能加上了#,這也要去掉。同樣這也是指在sql語句中的,在asp語句中的要保持原樣。
(3)空值的表示:在access中,判斷空值一般用是否=""來表示,但是這在SQL中往往出錯(cuò),如果遇到出錯(cuò)的問題或者程序運(yùn)行不正常,可以改成如這樣判斷:where (name is null)
(4)真假值判斷:access中可以用=true、=false來判斷,但是在SQL中就會(huì)出錯(cuò),因此在SQL查詢或執(zhí)行語句中這類判斷要分別改成=1、=0。注意一點(diǎn):有些程序雖然寫成=“true”,但是由于有引號(hào),所以這個(gè)字段是字符類型的,你不能改成=1,保持原樣即可。

以上是比較常見的改寫的地方,還有一些不太常見,如果遇到了可以在此回帖討論。

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

前面推薦使用帶有行號(hào)的編輯器,是因?yàn)樯鲜龅母膶懖淮罂赡苁侵苯铀阉鞒绦?a >源碼來做,很難找全。
我采取的方式一般這樣:數(shù)據(jù)庫改寫完成,直接調(diào)試程序,出錯(cuò)后,看看出錯(cuò)的提示,找到相應(yīng)文件的代碼行,但是根源往往不是那行,比如出錯(cuò)的語句是:conn.execute(sql),但是這句本身是沒有錯(cuò)的,錯(cuò)誤原因是里面的這個(gè)sql字符串,那就向上看這個(gè)sql字符串是如何生成的,按照上面所說的程序修改辦法修改。

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

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

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

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

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

備注類型要通過cast(column as varchar)來使用。

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

isnull(rowname)要改成rowname = null

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

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

對此兩種數(shù)據(jù)庫進(jìn)行操作的sql語句不全相同,例如:在對ACCESS數(shù)據(jù)庫進(jìn)行刪除紀(jì)錄時(shí)用:"delete * from user where id=10",而對SQL SERVER數(shù)據(jù)庫進(jìn)行刪除是用:"delete user where id=10".

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

在對ACCESS數(shù)據(jù)庫處理中,sql語句中直接可以用一些VB的函數(shù),像cstr()函數(shù),而對SQL SERVER數(shù)據(jù)庫處理中,卻不能用。
下表比較了MicrosoftAccess數(shù)據(jù)庫(MicrosoftAccess數(shù)據(jù)庫:數(shù)據(jù)和對象(如表、查詢或窗體)組成的集合,與特定的主題或用途有關(guān)。MicrosoftJet數(shù)據(jù)庫引擎用于管理數(shù)據(jù)。)和MicrosoftAccess項(xiàng)目(MicrosoftAccess項(xiàng)目:與MicrosoftSQLServer數(shù)據(jù)庫連接且用于創(chuàng)建客戶/服務(wù)器應(yīng)用程序的Access文件。項(xiàng)目文件中不包含任何數(shù)據(jù)或基于數(shù)據(jù)定義的對象(如表或視圖)。)的數(shù)據(jù)類型(數(shù)據(jù)類型:決定字段可擁有的數(shù)據(jù)類型的字段特征。數(shù)據(jù)類型包括Boolean、Integer、Long、Currency、Single、Double、Date、String和Variant(默認(rèn)))。


MicrosoftAccess數(shù)據(jù)類型SQLServer數(shù)據(jù)類型
是/否(“是/否”數(shù)據(jù)類型:一種字段數(shù)據(jù)類型,用于只有兩種可能值(如是或否、True或False)的字段。不允許有Null值。)bit(bit數(shù)據(jù)類型:在Access項(xiàng)目中,一種存儲(chǔ)值為1或0的數(shù)據(jù)類型。接受1和0以外的整數(shù)值,但總是將其解釋為1。)
數(shù)字(“數(shù)字”數(shù)據(jù)類型:MicrosoftAccess數(shù)據(jù)庫中的一種字段數(shù)據(jù)類型,用于將在數(shù)學(xué)運(yùn)算中使用的數(shù)值數(shù)據(jù)。但是,若要顯示或計(jì)算貨幣值,則應(yīng)使用“貨幣”數(shù)據(jù)類型。)(字節(jié))tinyint(tinyint數(shù)據(jù)類型:Access項(xiàng)目中的一種占一個(gè)字節(jié)(8位)的數(shù)據(jù)類型,用于存儲(chǔ)從0到255范圍內(nèi)的整數(shù)。)
數(shù)字(整型)smallint(smallint數(shù)據(jù)類型:Access項(xiàng)目中的一種2字節(jié)(16位)數(shù)據(jù)類型,存儲(chǔ)位于-2^15(-32,768)與2^15-1(32,767)之間的數(shù)字。)
數(shù)字(長整型)int(int數(shù)據(jù)類型:Access項(xiàng)目中的一種4字節(jié)(32位)數(shù)據(jù)類型,存儲(chǔ)位于-2^31(-2,147,483,648)與2^31-1(2,147,483,647)之間的數(shù)字。)
數(shù)字(單精度浮點(diǎn)型)real(real數(shù)據(jù)類型:在Access項(xiàng)目中,一種近似的數(shù)值數(shù)據(jù)類型,精度為7位,正值取值范圍大致從1.18E-38到3.40E+38,負(fù)值取值范圍大致從-1.18E-38到-3.40E+38,也可以取0。)
(無等價(jià)的數(shù)據(jù)類型)bigint(bigint數(shù)據(jù)類型:Access項(xiàng)目中的一種8字節(jié)(64位)數(shù)據(jù)類型,存儲(chǔ)位于-2^63(-9,223,372,036,854,775,808)與2^63-1(9,223,372,036,854,775,807)之間的數(shù)字。)
數(shù)字(雙精度浮點(diǎn)型)float(float數(shù)據(jù)類型:在Access項(xiàng)目中,一種近似的數(shù)值數(shù)據(jù)類型,精度為15位。它所存儲(chǔ)的正值范圍大致是從2.23E-308到1.79E+308,負(fù)值范圍大致是從-2.23E-308到-1.79E+308,也可以為0。)
貨幣(“貨幣”數(shù)據(jù)類型:MicrosoftAccess數(shù)據(jù)庫中的一種數(shù)據(jù)類型,用于與貨幣有關(guān)的計(jì)算或其精確度極其重要的定點(diǎn)計(jì)算。)money(money數(shù)據(jù)類型:在Access項(xiàng)目中,用于存儲(chǔ)貨幣值的數(shù)據(jù)類型,取值范圍從-922,337,203,685,477.5707到922,337,203,685,477.5807,精確度為萬分之一個(gè)貨幣單位。)

smallmoney(smallmoney數(shù)據(jù)類型:Access項(xiàng)目中的一種存儲(chǔ)貨幣值的數(shù)據(jù)類型,取值范圍從-214,748.3648到214,748.3647,精確度為萬分之一個(gè)貨幣單位。當(dāng)顯示smallmoney值時(shí),會(huì)將它們四舍五入為兩個(gè)小數(shù)位。)
小數(shù)/數(shù)值(decimal數(shù)據(jù)類型(Access數(shù)據(jù)庫):精確的數(shù)值數(shù)據(jù)類型,用于存儲(chǔ)-10^38-1到10^38-1的值。可以指定數(shù)值范圍(最大總位數(shù))和精度(小數(shù)點(diǎn)右邊的最大位數(shù))。)decimal(decimal數(shù)據(jù)類型(Access項(xiàng)目):精確的數(shù)值數(shù)據(jù)類型,用于存儲(chǔ)-10^38-1到10^38-1的值。可以指定數(shù)值范圍(最大總位數(shù))和精度(小數(shù)點(diǎn)右邊的最大位數(shù))。)

numeric(numeric數(shù)據(jù)類型:在Access項(xiàng)目中,一種精確的數(shù)值數(shù)據(jù)類型,取值從-10^38-1到10^38-1。可以指定數(shù)值范圍(最大總位數(shù))和精度(小數(shù)點(diǎn)右邊的最大位數(shù))。)
日期/時(shí)間(“日期/時(shí)間”數(shù)據(jù)類型:Access數(shù)據(jù)庫的一種數(shù)據(jù)類型,用來存放日期和時(shí)間信息。)datetime(datetime數(shù)據(jù)類型:在Access項(xiàng)目中,日期和時(shí)間的數(shù)據(jù)類型,范圍從1753年1月1日到9999年12月31日,精確度為三百分之一秒,即3.33毫秒。)

smalldatetime(smalldatetime數(shù)據(jù)類型:Access項(xiàng)目中的一種日期和時(shí)間數(shù)據(jù)類型,精度不如datetime時(shí)間數(shù)據(jù)類型。數(shù)據(jù)取值范圍從1900年1月1日到2079年6月6日,精確度為一分鐘。)
自動(dòng)編號(hào)(“自動(dòng)編號(hào)”數(shù)據(jù)類型:MicrosoftAccess數(shù)據(jù)庫中的一種字段數(shù)據(jù)類型,當(dāng)向表中添加一條新記錄時(shí),這種數(shù)據(jù)類型會(huì)自動(dòng)為每條記錄存儲(chǔ)一個(gè)唯一的編號(hào)。可以產(chǎn)生三種編號(hào):順序號(hào)、隨機(jī)號(hào)和同步復(fù)制ID。)(遞增)int(int數(shù)據(jù)類型:Access項(xiàng)目中的一種4字節(jié)(32位)數(shù)據(jù)類型,存儲(chǔ)位于-2^31(-2,147,483,648)與2^31-1(2,147,483,647)之間的數(shù)字。)(定義了Identity屬性)
文本(“文本”數(shù)據(jù)類型:MicrosoftAccess數(shù)據(jù)庫中的一種字段數(shù)據(jù)類型。“文本”數(shù)據(jù)類型最多可以包含255個(gè)字符,或者是由FieldSize屬性指定的一個(gè)小一些的字符數(shù)。)(n)varchar(n)(varchar(n)數(shù)據(jù)類型:Access項(xiàng)目中的一種可變長度的數(shù)據(jù)類型,最大長度為8,000個(gè)ANSI字符。)

nvarchar(n)(nvarchar(n)數(shù)據(jù)類型:在Access項(xiàng)目中,一種可變長度的數(shù)據(jù)類型,最多可含4,000個(gè)Unicode字符。Unicode字符每字符占兩個(gè)字節(jié),而且支持所有國際字符。)
備注(“備注”數(shù)據(jù)類型:在MicrosoftAccess數(shù)據(jù)庫中的一種字段數(shù)據(jù)類型。“備注”字段最多可以包含65,535個(gè)字符。)text(text數(shù)據(jù)類型:Access項(xiàng)目中的一種長度可變的數(shù)據(jù)類型,最多可存儲(chǔ)2^31-1(2,147,483,647)個(gè)字符;默認(rèn)長度為16。)
OLE對象(“OLE對象”數(shù)據(jù)類型:字段的數(shù)據(jù)類型之一,用于在其他應(yīng)用程序中創(chuàng)建的、可鏈接或嵌入(插入)到Access數(shù)據(jù)庫中的對象。)image(image數(shù)據(jù)類型:在Access項(xiàng)目中,一種長度可變的數(shù)據(jù)類型,最多可存儲(chǔ)2^31-1(2,147,483,647)字節(jié)的二進(jìn)制數(shù)據(jù)。image數(shù)據(jù)類型用來存儲(chǔ)BLOB(二進(jìn)制大對象),如圖片、文檔、聲音和已編譯代碼。)
同步復(fù)制ID(又名全局唯一標(biāo)識(shí)符(GUID:在Access數(shù)據(jù)庫中,一種用于建立同步復(fù)制唯一標(biāo)識(shí)符的16字節(jié)字段。GUID用于標(biāo)識(shí)副本、副本集、表、記錄和其他對象。在Access數(shù)據(jù)庫中,GUID是指同步復(fù)制ID。)(GUID))uniqueidentifier(uniqueidentifier數(shù)據(jù)類型:在Access項(xiàng)目中,16字節(jié)的全局唯一標(biāo)識(shí)符(GUID)。)(僅適于SQLServer7.0或更高版本)
超鏈接(“超鏈接”數(shù)據(jù)類型:存儲(chǔ)超鏈接地址的Access數(shù)據(jù)庫字段的數(shù)據(jù)類型。地址最多可以包含四部分,用以下語法格式編寫:displaytext#address#subaddress#。)char(char數(shù)據(jù)類型:在Access項(xiàng)目中,一種固定長度的數(shù)據(jù)類型,最多可含8,000個(gè)ANSI字符。),

nchar(nchar數(shù)據(jù)類型:在Access項(xiàng)目中,一種固定長度的數(shù)據(jù)類型,最多可含4,000個(gè)Unicode字符。Unicode字符每字符占兩個(gè)字節(jié),而且支持所有國際字符。),varchar,nvarchar(Hyperlink屬性設(shè)為Yes)
(無等價(jià)的數(shù)據(jù)類型)varbinary(varbinary數(shù)據(jù)類型:Access項(xiàng)目中的一種可變長度的數(shù)據(jù)類型,最多可存儲(chǔ)8,000字節(jié)的二進(jìn)制數(shù)據(jù)。)
(無等價(jià)的數(shù)據(jù)類型)smallint(smallint數(shù)據(jù)類型:Access項(xiàng)目中的一種2字節(jié)(16位)數(shù)據(jù)類型,存儲(chǔ)位于-2^15(-32,768)與2^15-1(32,767)之間的數(shù)字。)
(無等價(jià)的數(shù)據(jù)類型)timestamp(timestamp數(shù)據(jù)類型:在Access項(xiàng)目中,一種每插入或更新一行就會(huì)自動(dòng)更新的數(shù)據(jù)類型。timestamp列中的值不是datetime數(shù)據(jù),而是binary(8)或varbinary(8),標(biāo)明了數(shù)據(jù)修改的順序。)
(無等價(jià)的數(shù)據(jù)類型)charnchar
(無等價(jià)的數(shù)據(jù)類型)sql_variant(sql_variant數(shù)據(jù)類型:Access項(xiàng)目中的一種數(shù)據(jù)類型,存儲(chǔ)除text、ntext、image、timestamp和sql_variant類型以外的多種數(shù)據(jù)類型的值。在列、參數(shù)、變量或用戶定義函數(shù)的返回值中使用。)
(無等價(jià)的數(shù)據(jù)類型)用戶定義(用戶定義的數(shù)據(jù)類型:在MicrosoftSQLServer數(shù)據(jù)庫中,允許某列包含的數(shù)據(jù)的類型定義,由用戶利用現(xiàn)有的系統(tǒng)數(shù)據(jù)類型定義。規(guī)則和默認(rèn)值僅可以綁定到用戶定義的數(shù)據(jù)類型。)

注釋在Access項(xiàng)目或SQLServer數(shù)據(jù)庫中,前綴“n”代表“國家/地區(qū)”,意思是這個(gè)數(shù)據(jù)類型是啟用Unicode的。在Access數(shù)據(jù)庫中,全部文本列在默認(rèn)情況下都是啟用Unicode的。
ACCESS轉(zhuǎn)SQL需要注意的問題
2006-2-13 16:01:20
很多朋友想用SQL2000數(shù)據(jù)庫的編程方法,但是卻又苦于自己是學(xué)ACCESS的,對SQL只是一點(diǎn)點(diǎn)的了解而已,這里我給大家提供以下參考---將ACCESS轉(zhuǎn)化成SQL2000的方法和注意事項(xiàng)
一,首先,我說的是在ACCESS2000,SQL2000之間轉(zhuǎn)換,其他的我也還沒有嘗試過,希望大家多多試驗(yàn),肯定是有辦法的;
二,轉(zhuǎn)換的方法
1,打開”控制面板“下”管理工具“中的”數(shù)據(jù)庫源“;
2,按”添加“添加一個(gè)新的數(shù)據(jù)源,在選擇欄里選”DriverdomicrosoftAccess
(*.mdb)”,完成后將出現(xiàn)一個(gè)框,

在”數(shù)據(jù)庫源“里面輸入你想寫的名稱,我取名叫“ABC”,說明不需要填,接著,按下面的選擇,尋找你的數(shù)據(jù)庫地址和選中(注意,請先備份自己的ACCESS數(shù)據(jù)庫),然后確定。
數(shù)據(jù)源在這里建好了,剩下轉(zhuǎn)換了。

3,打開SQL2000企業(yè)管理器,進(jìn)入數(shù)據(jù)庫,新建一個(gè)空的數(shù)據(jù)庫“ABC”;
4,選擇新建立的數(shù)據(jù)庫,按鼠標(biāo)右鍵,選擇“所有任務(wù)”下“導(dǎo)入數(shù)據(jù)”,按“下一步”繼續(xù);
5,在數(shù)據(jù)庫源下拉但中選擇”DriverdomicrosoftAccess(*.mdb)“,在”用戶/系統(tǒng)DSN“中,選種你剛才添加的”ABC“,按”下一步“;
6,“目的”不需要修改,選擇服務(wù)器(一般下為自己的本機(jī)"local",也可以選擇服務(wù)器地址或者局域網(wǎng)地址,確定你的權(quán)限是否可以操作,),"使用WINDOWS身份驗(yàn)證"指用自己的系統(tǒng)管理員身份操作,"使用SQL身份操作驗(yàn)證"可以用于網(wǎng)站的操作,推薦用后者;
7,選上"使用SQL身份操作驗(yàn)證"后,填寫你的用戶名和密碼,我自己選擇的是系統(tǒng)默認(rèn)號(hào)碼"sa","****",數(shù)據(jù)庫選擇剛新建的"ABC",按"下一步";
8,這一步的兩個(gè)單項(xiàng)選擇,"從數(shù)據(jù)源復(fù)制表和視圖"與"用一條查詢指令指定要傳輸?shù)臄?shù)據(jù)",選擇前者,按"下一步"繼續(xù);
9,這里將出現(xiàn)你自己ACCESS數(shù)據(jù)庫的表,按"全選"后,下一步;
10,"DTS導(dǎo)入/導(dǎo)出向?qū)?,看"立即運(yùn)行"被選中按"下一步",
11,按"完成"繼續(xù);
12,這個(gè)步驟你將看到你的數(shù)據(jù)被導(dǎo)入SQL2000里面,當(dāng)出現(xiàn)"已經(jīng)成功把XXX個(gè)表導(dǎo)入到數(shù)據(jù)庫"的字樣,而且所有的表前面都有綠色的勾,就表示成功導(dǎo)入所有數(shù)據(jù),如果中途出現(xiàn)問題或者表前面有紅色的*的話,說明該表沒有成功導(dǎo)入,這時(shí)就要回去查看自己的操作是否正確了.

三,數(shù)據(jù)修改
1,由于SQL2000里面沒有"自動(dòng)編號(hào)",所以你的以"自動(dòng)編號(hào)"設(shè)置的字段都會(huì)變成非空的字段,這就必須手工修改這些字段,并把他的"標(biāo)示"選擇"是",種子為"1",增量為"1",
2,另外,ACCESS2000轉(zhuǎn)換成SQL2000后,原來屬性為"是/否"的字段將被轉(zhuǎn)換成非空的"bit",這時(shí)候你必須修改成自己想要的屬性了;
3,另外,大家要注意對時(shí)間函數(shù)的把握.ACCESS與SQL是有很多不同的.


四、相關(guān)的字段問題
1.ACCESS的數(shù)據(jù)庫中的自動(dòng)編號(hào)類型在轉(zhuǎn)化時(shí),sqlserver并沒有將它設(shè)為自動(dòng)編號(hào)型,我們需在SQL創(chuàng)建語句中加上identity,表示自動(dòng)編號(hào)!
2.轉(zhuǎn)化時(shí),跟日期有關(guān)的字段,SQLSERVER默認(rèn)為smalldatetime型,我們最好將它變?yōu)閐atetime型,因?yàn)閐atetime型的范圍比smalldatetime型大。我遇見這種情況,用smalldatetime型時(shí),轉(zhuǎn)化失敗,而用datetime型時(shí),轉(zhuǎn)化成功。
3.對此兩種數(shù)據(jù)庫進(jìn)行操作的sql語句不全相同,例如:在對ACCESS數(shù)據(jù)庫進(jìn)行刪除紀(jì)錄時(shí)用:"delete*fromuserwhereid=10",而對SQLSERVER數(shù)據(jù)庫進(jìn)行刪除是用:"deleteuserwhereid=10".
4.日期函數(shù)不相同,在對ACCESS數(shù)據(jù)庫處理中,可用date()、time()等函數(shù),但對SQLSERVER數(shù)據(jù)庫處理中,只能用datediff,dateadd等函數(shù),而不能用date()、time()等函數(shù)。
5.在對ACCESS數(shù)據(jù)庫處理中,sql語句中直接可以用一些VB的函數(shù),像cstr()函數(shù),而對SQLSERVER數(shù)據(jù)庫處理中,卻不能用。

五、相關(guān)語句問題
自動(dòng)增加字段需要重寫。在access中經(jīng)常使用的自動(dòng)編號(hào)字段,導(dǎo)入到mssql后,他并不是自增型的int,需要手工設(shè)置,把導(dǎo)入后的自動(dòng)編號(hào)字段的標(biāo)識(shí)的“否”改為“是”,“種子”和“遞增量”都為“1”,才能成為自動(dòng)編號(hào)


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


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


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


所有datediff('ww',time1,time2)要改成datediff(week,time1,time2)


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


在mssqlserver中,有許多保留字,在access中是沒有的,當(dāng)你把數(shù)據(jù)導(dǎo)入到mssql的時(shí)候,問題就出來了。mssql在導(dǎo)入的時(shí)候,會(huì)自動(dòng)給這些字段(包括數(shù)據(jù)庫中的表名)加上“[字段名]”,因此,你必須修改你的腳本,把相應(yīng)的字段名字(或者表名字)加上中括號(hào),或改變字段名字為不是mssql的保留字


在用access關(guān)于時(shí)間的使用,大家喜歡使用“select*fromaaaawhiletime="&now()”這樣的sql語句,然而,在mssql中沒有“now()”這個(gè)函數(shù),而是使用“getdate()”,所以,所有的sql語句中的“now()”必須換成“getdate()”。


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

轉(zhuǎn)化時(shí),跟日期有關(guān)的字段,SQLSERVER默認(rèn)為smalldatetime型,我們最好將它變?yōu)閐atetime型。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 贞丰县| 静安区| 长治县| 逊克县| 宁德市| 林甸县| 乌鲁木齐县| 葵青区| 庄浪县| 揭阳市| 穆棱市| 新竹市| 泰和县| 西充县| 镇康县| 临朐县| 如皋市| 扬州市| 邳州市| 香河县| 喀喇沁旗| 新津县| 罗城| 兴安县| 谷城县| 江孜县| 许昌县| 文山县| 华亭县| 海伦市| 榆社县| 义乌市| 宿州市| 嘉禾县| 会东县| 绵竹市| 阳泉市| 济宁市| 浪卡子县| 东丰县| 电白县|