第一份收集的:
http://www.bobog.cn/dispbbs.asp?boardID=11&ID=289&page=1動(dòng)網(wǎng)數據庫Access 轉成SQL Server2000 數據庫的一個(gè)絕對成功的好方法
步驟如下:
1、必須先安裝Microsoft Office Access 2003,和SQL Server2000。2、把舊的動(dòng)網(wǎng)數據庫備份,備份完成后,用Access 2003打開(kāi)動(dòng)網(wǎng)舊數據庫,在打開(kāi)時(shí)會(huì )出現一個(gè)警告,不要理會(huì )它(安全警告),按打開(kāi)鍵,打開(kāi)后按工具欄——數據庫實(shí)用工具——轉換數據庫——轉換為2002-2003格式,把數據庫轉換成2003格式。
2、轉換完成后再用Access 2003打開(kāi),打開(kāi)后按工具欄——數據庫實(shí)用工具——升遷向導——新建數據庫——填寫(xiě)SQL數據庫登陸名稱(chēng)、密碼和要新建的動(dòng)網(wǎng)數據庫(準備轉成新的動(dòng)網(wǎng)數據庫),按下一步,按“ 》”鍵,再按下一步,選取所有選項,再按下一步,選擇“不對應用程序作任何改動(dòng)”,再按完成。
3、打開(kāi)SQL企業(yè)管理器——數據庫---選中相應的數據庫---右鍵所有任務(wù)-----生成SQL腳本——常規——全部顯示——編寫(xiě)全部對象腳本——確定(記住存放的位置)。
4、用記事本打開(kāi)剛才生成的SQL腳本,在編輯欄——替換——查找內容為“smalldatetime”替換為“datetime”——替換全部;完成后再在編輯欄——替換——查找內容為“nvarchar”替換為“varcha”——替換全部,完成后保存退出。
5、打開(kāi)SQL企業(yè)管理器——數據庫——點(diǎn)擊這個(gè)數據庫下新建的動(dòng)網(wǎng)數據庫,然后在工具欄——SQL查詢(xún)分析器——文件——打開(kāi)——“剛才生成的SQL腳本”——查詢(xún)——執行,然后關(guān)閉窗口。
(有的朋友說(shuō),用sql版自帶的sql腳本也可以,大家不妨試試看)
6、再回到SQL企業(yè)管理器——數據庫——點(diǎn)擊這個(gè)數據庫下新建的動(dòng)網(wǎng)數據庫,然后打開(kāi)工具欄——數據庫轉換服務(wù)——導入數據——下一步——數據源“Microsoft Access”文件名“為舊的動(dòng)網(wǎng)數據庫”——下一步——再下一步——從源數據復制表和視圖——下一步——全選——下一步——立即運行——下一步——完成。
7、修改動(dòng)網(wǎng)文件夾兩個(gè)文件conn.asp和inc\const.asp。
Conn.asp文件修改如下:
Const IsSqlDataBase = 1
SqlDatabaseName = "MYBBS"
SqlPassword = "sa"
SqlUsername = "sa"
SqlLocalName = "MYSERVER"
Const.asp文件修改如下:
Const IsBuss=0
8、最后補充:
(1)由于SQL2000里面沒(méi)有"自動(dòng)編號",所以你的以"自動(dòng)編號"設置的字段都會(huì )變成非空的字段,這就必須手工修改這些字段,并把他的"標示"選擇"是",種子為"1",增量為"1",
(2)另外,ACCESS2000轉換成SQL2000后,原來(lái)屬性為"是/否"的字段將被轉換成非空的"bit",這時(shí)候你必須修改成自己想要的屬性了;
(3)另外,大家要注意對時(shí)間函數的把握.ACCESS與SQL是有很多不同的.
根據以上3點(diǎn),再回到SQL企業(yè)管理器——數據庫——點(diǎn)擊這個(gè)數據庫下新建的動(dòng)網(wǎng)數據庫,將所有表的字段屬性根據以上3點(diǎn)進(jìn)行修改
補充說(shuō)明:
自動(dòng)增加字段需要重寫(xiě)。在access中經(jīng)常使用的自動(dòng)編號字段,導入到mssql后,他并不是自增型的int,需要手工設置,把導入后的自動(dòng)編號字段的標識的“否”改為“是”,“種子”和“遞增量”都為“1”,才能成為自動(dòng)編號
所有的默認值都丟失了。主要是數字類(lèi)型和日期類(lèi)型
所有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)
在mssql server中,有許多保留字,在access中是沒(méi)有的,當你把數據導入到mssql的時(shí)候,問(wèn)題就出來(lái)了。mssql在導入的時(shí)候,會(huì )自動(dòng)給這些字段(包括數據庫中的表名)加上“[字段名]”,因此,你必須修改你的腳本,把相應的字段名字(或者表名字)加上中括號,或改變字段名字為不是mssql的保留字
在用access關(guān)于時(shí)間的使用,大家喜歡使用“select * from aaaa while time="&now()”這樣的sql語(yǔ)句,然而,在mssql中沒(méi)有“now()”這個(gè)函數,而是使用“getdate()”,所以,所有的sql語(yǔ)句中的“now()”必須換成“getdate()”。
日期函數不相同,在對ACCESS數據庫處理中,可用date()、time()等函數,但對
SQL SERVER數據庫處理中,只能用datediff,dateadd等函數,而不能用date()、time()等函數。
轉化時(shí),跟日期有關(guān)的字段,SQL SERVER默認為smalldatetime型,我們最好將它變?yōu)閐atetime型,因為datetime型的范圍比smalldatetime型大。有時(shí)用smalldatetime型時(shí),轉化失敗,而用datetime型時(shí),轉化成功
isnull(rowname)要改成rowname = null
CursorType要改成1,也就是打開(kāi)數據庫時(shí)要給出第一個(gè)數字參數為1,否則記錄可能
顯示不完整
備注類(lèi)型要通過(guò)cast(column as varchar)來(lái)使用
true/false類(lèi)型不能使用,要變?yōu)?/0
對此兩種數據庫進(jìn)行操作的sql語(yǔ)句不全相同,例如:在對ACCESS數據庫進(jìn)行刪除紀錄時(shí)用:"delete * from user where id=10",而對SQL SERVER數據庫進(jìn)行刪除是用:"delete user where id=10".
在對ACCESS數據庫處理中,sql語(yǔ)句中直接可以用一些VB的函數,像cstr()函數,而對SQL SERVER數據庫處理中,卻不能用
在access的sql語(yǔ)句中的時(shí)間使用變量查詢(xún)的時(shí)候,大家一般使用"select * from aaaa while time=#"&變量名&"#",在mssql中是不行的,他的語(yǔ)法是“select * from aaaa while time=‘"&變量名&"‘"”。(意思是讓你把日期時(shí)間變量當成字符串來(lái)使用,呵呵~~~)
原來(lái)ASP里的“DELETE * FROM ……”要改為“DELETE FROM ……”
有可能rs.update失敗,修改成update 表名 set 字段=‘值’ 這樣通過(guò)(遇到的情況,提示為:
Microsoft OLE DB Provider for SQL Server 錯誤 ‘80040e38‘
樂(lè )觀(guān)并發(fā)檢查失敗。已在此游標之外修改了該行。
/Admin_ClassOrder.asp,行 164 )
access里面除法可以使用"\"或者"/",MSSQL里面只能使用"/"
第二份收集的
1.數據庫導入以后,自動(dòng)增加字段需要重寫(xiě),所有的數字類(lèi)型需要增加長(cháng)度,最好用bigint。
2.所有的默認值都丟失了。主要是數字類(lèi)型和日期類(lèi)型。
3.所有sql語(yǔ)句中的now(),time(),date()要改成getdate()。
4.所有sql語(yǔ)句中的datediff(‘d‘, time1, time2)要改成datediff(day, time1, time2),相應的其他日期屬性也需要更改。
5.有可能一些true/false的判斷語(yǔ)句不能正常使用了,這里是指用整數型來(lái)表達bool的情況,要變?yōu)?/0。
6.備注類(lèi)型要通過(guò)cast(column as varchar)來(lái)使用。
7.CursorType要改成1,也就是打開(kāi)數據庫時(shí)要給出第一個(gè)數字參數為1,否則記錄可能
顯示不完整。也就是說(shuō),一般要寫(xiě)成rs.open sql, conn, 1。
8.isnull(rowname)要改成rowname = null
9.程序里如果有直接對整型變量的判斷,也需要進(jìn)行顯示的轉換,如:
if rs("id") = 0 then
要變?yōu)?br>if clng(rs("id")) = 0 then
詳細資料請看:http://www.cnblogs.com/squirrel_sc/archive/2004/09/25/46529.html
在含笑修行‘s BLOG上發(fā)現的類(lèi)似資料
http://blog.cnknow.com/blogview.asp?logID=159