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 資料庫處理中,卻不能用。
這幾天忙死了,忙的連喘息的時間都沒有 .... 希望這樣的日子早點結束