Access數(shù)據(jù)庫如何轉(zhuǎn)換為MSSQL數(shù)據(jù)庫?
Access數(shù)據(jù)庫如何轉(zhuǎn)換為MSSQL數(shù)據(jù)庫?很多朋友想用SQL2000數(shù)據(jù)庫的編程方法,但是卻又苦于自己是學(xué)ACCESS的,對SQL只是一點點的了解而已,這里我給大家提供以下參考。將ACCESS轉(zhuǎn)化成SQL2000的方法和注意事項一,首先,我說的是在ACCESS2000,SQL2000之間轉(zhuǎn)換,其他的我也還沒有嘗試過,希望大家多多試驗,肯定是有辦法的;二,轉(zhuǎn)換的方法1,打開”控制面板“下”管理工具“中的”數(shù)據(jù)庫源“;2,按”添加“添加一個新的數(shù)據(jù)源,在選擇欄里選”Driverdo microsoft Access(*.mdb)”,完成后將出現(xiàn)一個框,在”數(shù)據(jù)庫源“里面輸入你想寫的名稱,我取名叫“ABC”,說明不需要填,接著,按下面的選擇,尋找你的數(shù)據(jù)庫地址和選中(注意,請先備份自己的ACCESS數(shù)據(jù)庫),然后確定。數(shù)據(jù)源在這里建好了,剩下轉(zhuǎn)換了。3,打開SQL2000企業(yè)管理器,進入數(shù)據(jù)庫,新建一個空的數(shù)據(jù)庫“ABC”;4,選擇新建立的數(shù)據(jù)庫,按鼠標右鍵,選擇“所有任務(wù)”下“導(dǎo)入數(shù)據(jù)”,按“下一步”繼續(xù);5,在數(shù)據(jù)庫源下拉但中選擇”Driver do microsoftAccess(*.mdb)“,在”用戶/系統(tǒng)DSN“中,選種你剛才添加的”ABC“,按”下一步“;6,“目的”不需要修改,選擇服務(wù)器(一般下為自己的本機“l(fā)ocal“,也可以選擇服務(wù)器地址或者局域網(wǎng)地址,確定你的權(quán)限是否可以操作,),“使用WINDOWS身份驗證“指用自己的系統(tǒng)管理員身份操作,“使用SQL身份操作驗證“可以用于網(wǎng)站的操作,推薦用后者;7,選上“使用SQL身份操作驗證“后,填寫你的用戶名和密碼,我自己選擇的是系統(tǒng)默認號碼“sa“,“****“,數(shù)據(jù)庫選擇剛新建的“ABC“,按“下一步“;8,這一步的兩個單項選擇,“從數(shù)據(jù)源復(fù)制表和視圖“與“用一條查詢指令指定要傳輸?shù)臄?shù)據(jù)“,選擇前者,按“下一步“繼續(xù);9,這里將出現(xiàn)你自己ACCESS數(shù)據(jù)庫的表,按“全選“后,下一步;10,“DTS導(dǎo)入/導(dǎo)出向?qū)А?看“立即運行“被選中按“下一步“,11,按“完成“繼續(xù);12,這個步驟你將看到你的數(shù)據(jù)被導(dǎo)入SQL2000里面,當出現(xiàn)“已經(jīng)成功把XXX個表導(dǎo)入到數(shù)據(jù)庫“的字樣,而且所有的表前面都有綠色的勾,就表示成功導(dǎo)入所有數(shù)據(jù),如果中途出現(xiàn)問題或者表前面有紅色的叉的話,說明該表沒有成功導(dǎo)入,這時就要回去查看自己的操作是否正確了.三,數(shù)據(jù)修改1,由于SQL2000里面沒有“自動編號“,所以你的以“自動編號“設(shè)置的字段都會變成非空的字段,這就必須手工修改這些字段,并把他的“標示“選擇“是“,種子為“1“,增量為“1“,2,另外,ACCESS2000轉(zhuǎn)換成SQL2000后,原來屬性為“是/否“的字段將被轉(zhuǎn)換成非空的“bit“,這時候你必須修改成自己想要的屬性了;3,另外,大家要注意對時間函數(shù)的把握.ACCESS與SQL是有很多不同的.ACCESS改為SQL需要注意哪幾個地方數(shù)據(jù)庫導(dǎo)入以后,自動增加字段需要重寫,所有的數(shù)字類型需要增加長度,最好用decimal。所有的默認值都丟失了。主要是數(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ù)字參數(shù)為1,否則記錄可能顯示不完整。isnull(rowname)要改成rowname = nullACCESS的數(shù)據(jù)庫中的自動編號類型在轉(zhuǎn)化時,sqlserver并沒有將它設(shè)為自動編號型,我們需在SQL創(chuàng)建語句中加上identity,表示自動編號!轉(zhuǎn)化時,跟日期有關(guān)的字段,SQLSERVER默認為smalldatetime型,我們最好將它變?yōu)閐atetime型,因為datetime型的范圍比smalldatetime型大。有時用smalldatetime型時,轉(zhuǎn)化失敗,而用datetime型時,轉(zhuǎn)化成功。對此兩種數(shù)據(jù)庫進行操作的sql語句不全相同,例如:在對ACCESS數(shù)據(jù)庫進行刪除紀錄時用:“delete* from user where id=10“,而對SQLSERVER數(shù)據(jù)庫進行刪除是用:“delete user whereid=10“.日期函數(shù)不相同,在對ACCESS數(shù)據(jù)庫處理中,可用date()、time()等函數(shù),但對SQLSERVER數(shù)據(jù)庫處理中,只能用datediff,dateadd等函數(shù),而不能用date()、time()等函數(shù)。在對ACCESS數(shù)據(jù)庫處理中,sql語句中直接可以用一些VB的函數(shù),像cstr()函數(shù),而對SQLSERVER數(shù)據(jù)庫處理中,卻不能用。ACCESS轉(zhuǎn)SQLSERVER的數(shù)據(jù)庫的幾點經(jīng)驗1.ACCESS的數(shù)據(jù)庫中的自動編號類型在轉(zhuǎn)化時,sqlserver并沒有將它設(shè)為自動編號型,我們需在SQL創(chuàng)建語句中加上identity,表示自動編號!2.轉(zhuǎn)化時,跟日期有關(guān)的字段,SQLSERVER默認為smalldatetime型,我們最好將它變?yōu)閐atetime型,因為datetime型的范圍比smalldatetime型大。我遇見這種情況,用smalldatetime型時,轉(zhuǎn)化失敗,而用datetime型時,轉(zhuǎn)化成功。3.對此兩種數(shù)據(jù)庫進行操作的sql語句不全相同,例如:在對ACCESS數(shù)據(jù)庫進行刪除紀錄時用:“delete* from user where id=10“,而對SQLSERVER數(shù)據(jù)庫進行刪除是用:“delete user whereid=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ù)庫處理中,卻不能用。ACCESS轉(zhuǎn)MSSQL數(shù)據(jù)庫需要注意的問題自動增加字段需要重寫。在access中經(jīng)常使用的自動編號字段,導(dǎo)入到mssql后,他并不是自增型的int,需要手工設(shè)置,把導(dǎo)入后的自動編號字段的標識的“否”改為“是”,“種子”和“遞增量”都為“1”,才能成為自動編號所有的默認值都丟失了。主要是數(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中是沒有的,當你把數(shù)據(jù)導(dǎo)入到mssql的時候,問題就出來了。mssql在導(dǎo)入的時候,會自動給這些字段(包括數(shù)據(jù)庫中的表名)加上“[字段名]”,因此,你必須修改你的腳本,把相應(yīng)的字段名字(或者表名字)加上中括號,或改變字段名字為不是mssql的保留字在用access關(guān)于時間的使用,大家喜歡使用“select *from aaaa whiletime="&now()”這樣的sql語句,然而,在mssql中沒有“now()”這個函數(shù),而是使用“getdate()”,所以,所有的sql語句中的“now()”必須換成“getdate()”。日期函數(shù)不相同,在對ACCESS數(shù)據(jù)庫處理中,可用date()、time()等函數(shù),但對SQLSERVER數(shù)據(jù)庫處理中,只能用datediff,dateadd等函數(shù),而不能用date()、time()等函數(shù)。轉(zhuǎn)化時,跟日期有關(guān)的字段,SQLSERVER默認為smalldatetime型,我們最好將它變?yōu)閐atetime型,因為datetime型的范圍比smalldatetime型大。有時用smalldatetime型時,轉(zhuǎn)化失敗,而用datetime型時,轉(zhuǎn)化成功isnull(rowname)要改成rowname = nullCursorType要改成1,也就是打開數(shù)據(jù)庫時要給出第一個數(shù)字參數(shù)為1,否則記錄可能顯示不完整備注類型要通過cast(column as varchar)來使用true/false類型不能使用,要變?yōu)?/0對此兩種數(shù)據(jù)庫進行操作的sql語句不全相同,例如:在對ACCESS數(shù)據(jù)庫進行刪除紀錄時用:"delete* from user where id=10",而對SQLSERVER數(shù)據(jù)庫進行刪除是用:"delete user whereid=10".在對ACCESS數(shù)據(jù)庫處理中,sql語句中直接可以用一些VB的函數(shù),像cstr()函數(shù),而對SQLSERVER數(shù)據(jù)庫處理中,卻不能用在access的sql語句中的時間使用變量查詢的時候,大家一般使用"select* from aaaa whiletime=#"&變量名&"#",在mssql中是不行的,他的語法是“select* from aaaa whiletime=’"&變量名&"’"”。(意思是讓你把日期時間變量當成字符串來使用,呵呵~~~)原來ASP里的“DELETE * FROM ……”要改為“DELETE FROM……”有可能rs.update失敗,修改成update 表名 set字段=‘值’這樣通過(遇到的情況,提示為:Microsoft OLE DB Provider for SQL Server 錯誤 ’80040e38’樂觀并發(fā)檢查失敗。已在此游標之外修改了該行。/Admin_ClassOrder.asp,行 164 )access里面除法可以使用"\"或者"/",MSSQL里面只能使用"/"1、自動增加字段需要重寫。在access中經(jīng)常使用的自動編號字段,導(dǎo)入到mssql后,他并不是自增型的int,需要手工設(shè)置,把導(dǎo)入后的自動編號字段的標識的“否”改為“是”,“種子”和“遞增量”都為“1”,才能成為自動編號。2、所有的默認值都丟失了。主要是數(shù)字類型和日期類型3、所有now(),time(),date()要改成getdate()4、所有datediff(’d’, time1, time2)要改成datediff(day, time1,time2)5、所有datediff(’ww’, time1, time2)要改成datediff(week,time1, time2)6、所有datediff(’d’, time1, time2)要改成datediff(day, time1,time2)7、在mssqlserver中,有許多保留字,在access中是沒有的,當你把數(shù)據(jù)導(dǎo)入到mssql的時候,問題就出來了。mssql在導(dǎo)入的時候,會自動給這些字段(包括數(shù)據(jù)庫中的表名)加上“[字段名]”,因此,你必須修改你的腳本,把相應(yīng)的字段名字(或者表名字)加上中括號,或改變字段名字為不是mssql的保留字8、在用access關(guān)于時間的使用,大家喜歡使用“select* from aaaa whiletime="&now()”這樣的sql語句,然而,在mssql中沒有“now()”這個函數(shù),而是使用“getdate()”,所以,所有的sql語句中的“now()”必須換成“getdate()”。9、日期函數(shù)不相同,在對ACCESS數(shù)據(jù)庫處理中,可用date()、time()等函數(shù),但對SQLSERVER數(shù)據(jù)庫處理中,只能用datediff,dateadd等函數(shù),而不能用date()、time()等函數(shù)。10、轉(zhuǎn)化時,跟日期有關(guān)的字段,SQLSERVER默認為smalldatetime型,我們最好將它變?yōu)閐atetime型,因為datetime型的范圍比smalldatetime型大。有時用smalldatetime型時,轉(zhuǎn)化失敗,而用datetime型時,轉(zhuǎn)化成功11、isnull(rowname)要改成rowname = null12、CursorType要改成1,也就是打開數(shù)據(jù)庫時要給出第一個數(shù)字參數(shù)為1,否則記錄可能顯示不完整13、備注類型要通過cast(column as varchar)來使用14、true/false類型不能使用,要變?yōu)?/015、對此兩種數(shù)據(jù)庫進行操作的sql語句不全相同,例如:在對ACCESS數(shù)據(jù)庫進行刪除紀錄時用:"delete* from user where id=10",而對SQLSERVER數(shù)據(jù)庫進行刪除是用:"delete user whereid=10".16、在對ACCESS數(shù)據(jù)庫處理中,sql語句中直接可以用一些VB的函數(shù),像cstr()函數(shù),而對SQLSERVER數(shù)據(jù)庫處理中,卻不能用17、在access的sql語句中的時間使用變量查詢的時候,大家一般使用"select* from aaaa whiletime=#"&變量名&"#",在mssql中是不行的,他的語法是“select* from aaaa whiletime=’"&變量名&"’"”。(意思是讓你把日期時間變量當成字符串來使用)18、原來ASP里的“DELETE * FROM ……”要改為“DELETEFROM ……”19、有可能rs.update失敗,修改成update 表名 set字段=‘值’ 這樣通過20、access里面除法可以使用"\"或者"/",MSSQL里面只能使用"/"21、在SqlServer中建立主鍵22、如果還有問題用:rs.open sql,conn,3,2試試
發(fā)布時間:2011/10/28