把ACCESS轉成SQL數據庫

很多朋友想用SQL2000數據庫的編程方法,但是卻又苦於自己是學ACCESS的,對SQL只是一點點的瞭解而已,這裏我給大家提供以下參考---將ACCESS轉化成SQL2000的方法和注意事項

 一,首先,我說的是在ACCESS2000,SQL2000之間轉換,其他的我也還沒有嘗試過,希望大家多多試驗,肯定是有辦法的;

 二,轉換的方法

 1,打開”控制面板“下”管理工具“中的”數據庫源“;

 2,按”添加“添加一個新的數據源,在選擇欄裏選“Driver do microsoft Access (*.mdb)”,完成後將出現一個框,在“數據庫源”裏面輸入你想寫的名稱,我取名叫“ABC”,說明不需要填,接着,按下面的選擇,尋找你的數據庫地址和選中(注意,請先備份自己的ACCESS數據庫),然後確定。數據源在這裏建好了,剩下轉換了。

 3,打開SQL2000企業管理器,進入數據庫,新建一個空的數據庫“ABC”;

 4,選擇新建立的數據庫,按鼠標右鍵,選擇“所有任務”下“導入數據”,按“下一步”繼續;

 5,在數據庫源下拉但中選擇”Driver do microsoft Access(*.mdb)“,在”用戶/系統DSN“中,選種你剛纔添加的”ABC“,按 ”下一步“;

 6,“目的”不需要修改,選擇服務器(一般下爲自己的本機local,也可以選擇服務器地址或者局域網地址,確定你的權限是否可以操作,),使用WINDOWS 身份驗證指用自己的系統管理員身份操作,使用SQL身份操作驗證可以用於網站的操作,推薦用後者;

 7,選上使用SQL身份操作驗證後,填寫你的用戶名和密碼,我自己選擇的是系統默認號碼sa,****,數據庫選擇剛新建的ABC,按下一步;

 8,這一步的兩個單項選擇,從數據源複製表和視圖與用一條查詢指令指定要傳輸的數據,選擇前者,按下一步繼續;

 9,這裏將出現你自己ACCESS數據庫的表,按全選後,下一步;

 10,DTS導入/導出嚮導,看立即運行被選中按下一步,

 11,按完成繼續;

 12,這個步驟你將看到你的數據被導入SQL2000裏面,當出現已經成功把XXX個表導入到數據庫的字樣,而且所有的表前面都有綠色的勾,就表示成功導入所有數據,如果中途出現問題或者表前面有紅色的叉的話,說明該表沒有成功導入,這時就要回去查看自己的操作是否正確了.

 

三,數據修改

 1,由於SQL2000裏面沒有自動編號,所以你的以自動編號設置的字段都會變成非空的字段,這就必須手工修改這些字段,並把他的標示選擇是,種子爲1,增量爲1,

 2,另外,ACCESS2000轉換成SQL2000後,原來屬性爲是/否的字段將被轉換成非空的bit,這時候你必須修改成自己想要的屬性了;

 3,另外,大家要注意對時間函數的把握.ACCESS與SQL是有很多不同的.

 ACCESS轉MS SQL數據庫的幾點經驗

 1.ACCESS的數據庫中的自動編號類型在轉化時,sql server並沒有將它設爲自動編號型,我們需在SQL創建語句中加上identity,表示自動編號!

 2.轉化時,跟日期有關的字段,SQL SERVER默認爲smalldatetime型,我們最好將它變爲datetime型,因爲datetime型的範圍比smalldatetime型大。我遇見這種情況,用smalldatetime型時,轉化失敗,而用datetime型時,轉化成功。

 3.對此兩種數據庫進行操作的sql語句不全相同,例如:

在對ACCESS數據庫進行刪除紀錄時用:delete * from user where id=10,而對SQL SERVER數據庫進行刪除是用:delete user where id=10.

ACCESS與SQLSERVER中的UPDATE語句對比:
SQLSERVER中更新多表的UPDATE語句:
UPDATE Tab1
SET a.Name = b.Name
FROM Tab1 a,Tab2 b
WHERE a.ID = b.ID;
同樣功能的SQL語句在ACCESS中應該是
UPDATE Tab1 a,Tab2 b
SET a.Name = b.Name
WHERE a.ID = b.ID;
即:ACCESS中的UPDATE語句沒有FROM子句,所有引用的表都列在UPDATE關鍵字後.
上例中如果Tab2可以不是一個表,而是一個查詢,例:
UPDATE Tab1 a,(Select ID,Name From Tab2) b

 SET a.Name = b.Name
WHERE a.ID = b.ID;

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

 5.在對ACCESS數據庫處理中,sql語句中直接可以用一些VB的函數,像cstr()函數,而對SQL SERVER數據庫處理中,卻不能用。

補充:

給大家一些我的經驗吧。反正access到sqlserver的移植是很痛苦的,我弄過好幾次了。希望大家能補充一下。

1.數據庫導入以後,自動增加字段需要重寫,所有的數字類型需要增加長度,最好用decimal。

2.所有的默認值都丟失了。主要是數字類型和日期類型。

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

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

5.有可能一些true/false類型不能使用,要變爲1/0。

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

7.CursorType要改成1,也就是打開數據庫時要給出第一個數字參數爲1,否則記錄可能顯示不完整。

8.isnull(rowname)要改成rowname = null

Access轉sqlserver需要注意的地方

1,對於日期字段字段
access表示爲:#1981-28-12#
SQLSERVER2000表示爲:‘‘1981-02-12‘‘
2,SQL語句區別,select ,update 在對單表操作時都差不多,
但多表操作時update語句的區別ACCESS與SQLSERVER中的UPDATE語句對比:
SQLSERVER中更新多表的UPDATE語句:
UPDATE Tab1
SET a.Name = b.Name
FROM Tab1 a,Tab2 b
WHERE a.ID = b.ID;
同樣功能的SQL語句在ACCESS中應該是
UPDATE Tab1 a,Tab2 b
SET a.Name = b.Name
WHERE a.ID = b.ID;
即:ACCESS中的UPDATE語句沒有FROM子句,所有引用的表都列在UPDATE關鍵字後.
更新單表時:都爲:
UPDATE table1 set ab=‘12‘,cd=444 where ....
3,delete語句
access中刪除時用:delete * from table1 where a>2 即只要把select 語句裏的select 換成delete就可以了。
sqlserve 中則爲: delete from table1 where a>2 即沒有*號
4,as 後面的計算字段區別
access中可以這樣:select a,sum(num) as kc_num,kc_num*num as all_kc_num 即可以把AS後的字段當作一個數據庫字段參與計算。
sqlserver 中則爲:select a,sum(num) as kc_num,sum(num)*num as all_kc_num 即不可以把AS後的字段當作一個數據庫字段參與計算。
5,[.]與[!]的區別
access中多表聯合查詢時:select tab1!a as tab1a,tab2!b tab2b from tab1,tab2 ,中間的AS可以不要。
 sqlserve 中則:select tab1.a as tab1a,tab2.b tab2b from tab1,tab2 ,中間的AS可以不要。
6,聯合查詢時,
   access中多表聯合查詢:‘select a,b from(
select a,b from tab1 where a>3 union select c,d from tab2 ) group by a,b
sqlserve 中則‘select a,b from(
select a,b from tab1 where a>3 union select c,d from tab2 ) tmptable group by a,b即要加一個虛的表tmptable,表名任意。---
7,access升級到sqlserver時,
  可以用sqlserver的數據導入工具導入數據,但要做必要的處理。
  access中的自動編號,不會自動轉換SQL中的自動編號,只能轉換爲int型,要把它手工改成標識字段,種子爲1,把所有導入被sqlserver轉化成的以n開頭的字段類型的n去掉,如nvarchar->varchar.把需要有秒類型的日期字段改成datatime類型(SQL會把所有的日期開轉化成smalldatetime型)
8,true與1=1
access用where true表示條件爲真,
sqlserver用where 1=1表示條件爲真
9,判斷字段值爲空的區別
普通空:
Access和sql server一樣 where code is null 或 where code is nol null
條件空:
Access:iif([num] is null,0,[num]) 或 iif([num] is null,[num1],[num])
SQLServer: isnull([num],0) 或 isnull([num],[num1])

10,SQL語句取子串的區別
access:MID(字段,n1,[n2]),LEFT(字段,n),RIGHT(字段,n)
如:select left(cs1,4)+‘-‘+cs2 as cs3
SQLServer: SUBSTRING(expression, start, length)
如:select substring(cs1, 1, 2) + substring(cs1, 4, 2) + ‘-‘ + cs2 as cs3


補充:

ACCESS與SQL2000的SQL語句有區別的
比如now()在SQL2000中必須改爲getdate()
還有關鍵詞必須加[] ,像ACCESS中字段名用name SQL20000必須加[name] 否則出錯

數據庫連接字重新配置

1. access 轉sql 數據庫後需要建立各表關鍵字以及遞增量設置部分數據類型需要重新定義
2. now() 函數是可接受的,但在日期比較過程中需要用 getdate()
3. 保留字需要加 []
4. 單雙引號需要轉變
5. 遵循標準sql定義(最關鍵的一條)

看看MSSQLServer聯機叢書。

1.ACCESS的數據庫中的自動編號類型在轉化時,sql server並沒有將它設爲自動編號型,我們需在SQL創建語句中加上identity,表示自動編號!
2.轉化時,跟日期有關的字段,SQL SERVER默認爲smalldatetime型,我們最好將它變爲datetime型,因爲datetime型的範圍比smalldatetime型大。我遇見這種情況,用smalldatetime型時,轉化失敗,而用datetime型時,轉化成功。
3.對此兩種數據庫進行操作的sql語句不全相同,例如:在對ACCESS數據庫進行刪除紀錄時用:"delete * from user where id=10",而對SQL SERVER數據庫進行刪除是用:"delete user where id=10".
4.日期函數不相同,在對ACCESS數據庫處理中,可用date()、time()等函數,但對
sql SERVER數據庫處理中,只能用datediff,dateadd等函數,而不能用date()、time()等函數。
5.在對ACCESS數據庫處理中,sql語句中直接可以用一些VB的函數,像cstr()函數,而對SQL SERVER數據庫處理中,卻不能用。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章