很多朋友想用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改為SQL需要註意哪幾個地方
數據庫導入以後,自動增加字段需要重寫,所有的數字類型需要增加長度,最好用decimal。
所有的默認值都丟失了。主要是數字類型和日期類型。
所有now(),time(),date()要改成getdate()。
所有datediff(‘d‘, time1, time2)要改成datediff(day, time1, time2)
有可能壹些true/false類型不能使用,要變為1/0。
備註類型要通過cast(column as varchar)來使用。
CursorType要改成1,也就是打開數據庫時要給出第壹個數字參數為1,否則記錄可能顯示不完整。
isnull(rowname)要改成rowname = null
ACCESS的數據庫中的自動編號類型在轉化時,sql server並沒有將它設為自動編號型,我們需在SQL創建語句中加上identity,表示自動編號!
轉化時,跟日期有關的字段,SQL SERVER默認為smalldatetime型,我們最好將它變為datetime型,因為datetime型的範圍比smalldatetime型大。有時用smalldatetime型時,轉化失敗,而用datetime型時,轉化成功。
對此兩種數據庫進行操作的sql語句不全相同,例如:在對ACCESS數據庫進行刪除紀錄時用:“delete * from user where id=10“,而對SQL SERVER數據庫進行刪除是用:“delete user where id=10“.
日期函數不相同,在對ACCESS數據庫處理中,可用date()、time()等函數,但對SQL SERVER數據庫處理中,只能用datediff,dateadd等函數,而不能用date()、time()等函數。
在對ACCESS數據庫處理中,sql語句中直接可以用壹些VB的函數,像cstr()函數,而對SQL SERVER數據庫處理中,卻不能用。
ACCESS轉SQL SERVER的數據庫的幾點經驗
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數據庫處理中,卻不能用。
access轉mssql需要註意的問題
自動增加字段需要重寫。在access中經常使用的自動編號字段,導入到mssql後,他並不是自增型的int,需要手工設置,把導入後的自動編號字段的標識的“否”改為“是”,“種子”和“遞增量”都為“1”,才能成為自動編號
所有的默認值都丟失了。主要是數字類型和日期類型
所有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中是沒有的,當妳把數據導入到mssql的時候,問題就出來了。mssql在導入的時候,會自動給這些字段(包括數據庫中的表名)加上“[字段名]”,因此,妳必須修改妳的腳本,把相應的字段名字(或者表名字)加上中括號,或改變字段名字為不是mssql的保留字
在用access關於時間的使用,大家喜歡使用“select * from aaaa while time="&now()”這樣的sql語句,然而,在mssql中沒有“now()”這個函數,而是使用“getdate()”,所以,所有的sql語句中的“now()”必須換成“getdate()”。
日期函數不相同,在對ACCESS數據庫處理中,可用date()、time()等函數,但對
SQL SERVER數據庫處理中,只能用datediff,dateadd等函數,而不能用date()、time()等函數。
轉化時,跟日期有關的字段,SQL SERVER默認為smalldatetime型,我們最好將它變為datetime型,因為datetime型的範圍比smalldatetime型大。有時用smalldatetime型時,轉化失敗,而用datetime型時,轉化成功
isnull(rowname)要改成rowname = null
CursorType要改成1,也就是打開數據庫時要給出第壹個數字參數為1,否則記錄可能
顯示不完整
備註類型要通過cast(column as varchar)來使用
true/false類型不能使用,要變為1/0
對此兩種數據庫進行操作的sql語句不全相同,例如:在對ACCESS數據庫進行刪除紀錄時用:"delete * from user where id=10",而對SQL SERVER數據庫進行刪除是用:"delete user where id=10".
在對ACCESS數據庫處理中,sql語句中直接可以用壹些VB的函數,像cstr()函數,而對SQL SERVER數據庫處理中,卻不能用
在access的sql語句中的時間使用變量查詢的時候,大家壹般使用"select * from aaaa while time=#"&變量名&"#",在mssql中是不行的,他的語法是“select * from aaaa while time='"&變量名&"'"”。(意思是讓妳把日期時間變量當成字符串來使用,呵呵~~~)
原來ASP裏的“DELETE * FROM ……”要改為“DELETE FROM ……”
有可能rs.update失敗,修改成update 表名 set 字段=‘值’ 這樣通過(遇到的情況,提示為:
Microsoft OLE DB Provider for SQL Server 錯誤 '80040e38'
樂觀並發檢查失敗。已在此遊標之外修改了該行。
/Admin_ClassOrder.asp,行 164 )
access裏面除法可以使用"\"或者"/",MSSQL裏面只能使用"/"
1、自動增加字段需要重寫。在access中經常使用的自動編號字段,導入到mssql後,他並不是自增型的int,需要手工設置,把導入後的自動編號字段的標識的“否”改為“是”,“種子”和“遞增量”都為“1”,才能成為自動編號。
2、所有的默認值都丟失了。主要是數字類型和日期類型
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、在mssql server中,有許多保留字,在access中是沒有的,當妳把數據導入到mssql的時候,問題就出來了。mssql在導入的時候,會自動給這些字段(包括數據庫中的表名)加上“[字段名]”,因此,妳必須修改妳的腳本,把相應的字段名字(或者表名字)加上中括號,或改變字段名字為不是mssql的保留字
8、在用access關於時間的使用,大家喜歡使用“select * from aaaa while time="&now()”這樣的sql語句,然而,在mssql中沒有“now()”這個函數,而是使用“getdate()”,所以,所有的sql語句中的“now()”必須換成“getdate()”。
9、日期函數不相同,在對ACCESS數據庫處理中,可用date()、time()等函數,但對
SQL SERVER數據庫處理中,只能用datediff,dateadd等函數,而不能用date()、time()等函數。
10、轉化時,跟日期有關的字段,SQL SERVER默認為smalldatetime型,我們最好將它變為datetime型,因為datetime型的範圍比smalldatetime型大。有時用smalldatetime型時,轉化失敗,而用datetime型時,轉化成功
11、isnull(rowname)要改成rowname = null
12、CursorType要改成1,也就是打開數據庫時要給出第壹個數字參數為1,否則記錄可能顯示不完整
13、備註類型要通過cast(column as varchar)來使用
14、true/false類型不能使用,要變為1/0
15、對此兩種數據庫進行操作的sql語句不全相同,例如:在對ACCESS數據庫進行刪除紀錄時用:"delete * from user where id=10",而對SQL SERVER數據庫進行刪除是用:"delete user where id=10".
16、在對ACCESS數據庫處理中,sql語句中直接可以用壹些VB的函數,像cstr()函數,而對SQL SERVER數據庫處理中,卻不能用
17、在access的sql語句中的時間使用變量查詢的時候,大家壹般使用"select * from aaaa while time=#"&變量名&"#",在mssql中是不行的,他的語法是“select * from aaaa while time='"&變量名&"'"”。(意思是讓妳把日期時間變量當成字符串來使用)
18、原來ASP裏的“DELETE * FROM ……”要改為“DELETE FROM ……”
19、有可能rs.update失敗,修改成update 表名 set 字段=‘值’ 這樣通過
20、access裏面除法可以使用"\"或者"/",MSSQL裏面只能使用"/"
21、在SqlServer中建立主鍵
22、如果還有問題用:rs.open sql,conn,3,2試試
***************************************************************************************
ACCESS轉SQL SERVER的數據庫的幾點經驗
ACCESS轉SQL SERVER的數據庫的幾點經驗
1.ACCESS的數據庫中的自動編號類型在轉化時,sql server並沒有將它設為自動編號型,我們需在SQL創建語句中加上identity,表示自動編號!
2.轉化時,跟日期有關的字段,SQL SERVER默認為smalldatetime型,我們最好將它變為datetime型,因為datetime型的範圍比smalldatetime型大。我遇見這種情況,用smalldatetime型時,轉化失敗,而用datetime型時,轉化成功。
3.對此兩種數據庫進行操作的sql語句不全相同,例如:在對ACCESS數據庫進行刪除紀錄時用:%22delete * from user where id=10%22,而對SQL SERVER數據庫進行刪除是用:%22delete user where id=10%22.
4.日期函數不相同,在對ACCESS數據庫處理中,可用date()、time()等函數,但對SQL SERVER數據庫處理中,只能用datediff,dateadd等函數,而不能用date()、time()等函數。
5.在對ACCESS數據庫處理中,sql語句中直接可以用壹些VB的函數,像cstr()函數,而對SQL SERVER數據庫處理中,卻不能用。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 即沒有*號中國2006-4-15 19:27:48
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數據庫進行刪除紀錄時用:%22delete * from user where id=10%22,而對SQL SERVER數據庫進行刪除是用:%22delete user where id=10%22.
4.日期函數不相同,在對ACCESS數據庫處理中,可用date()、time()等函數,但對
SQL SERVER數據庫處理中,只能用datediff,dateadd等函數,而不能用date()、time()等函數。
5.在對ACCESS數據庫處理中,sql語句中直接可以用壹些VB的函數,像cstr()函數,而對SQL SERVER數據庫處理中,卻不能用。