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 資料庫處理中,卻不能用。   


這幾天忙死了,忙的連喘息的時間都沒有 .... 希望這樣的日子早點結束