在軟件開發過程中經常會遇到數據庫升遷的問題
原因比較多
如acsess訪問速度比sql server慢
刪除數據記錄後access會留下空檔
文件越來越大(也可用壓縮修復的方式減小文件大小
但太麻煩)
訪問速度越來越慢
甚至會數據庫損壞
損壞得比較輕的可以找第三方工具來修復
便嚴重時會導致數據庫無法修復
或修復後數據記錄會損壞
所以我們大有必要升遷我們現有的Access數據庫到SQL Server;
現談談筆者在升遷時的做法及注意事項
對於日期字段字段 access表示為:#
#
SQLSERVER
表示為:
SQL語句區別select update 在對單表操作時都差不多但多表操作時update語句的區別ACCESS與SQLSERVER中的UPDATE語句對比: SQLSERVER中更新多表的UPDATE語句:
UPDATE Tab
SET a
Name = b
Name
FROM Tab
a
Tab
b
WHERE a
ID = b
ID;
同樣功能的SQL語句在ACCESS中應該是
UPDATE Tab
a
Tab
b
SET a
Name = b
Name
WHERE a
ID = b
ID;
即:ACCESS中的UPDATE語句沒有FROM子句
所有引用的表都列在UPDATE關鍵字後
更新單表時:都為:
UPDATE table
set ab=
cd=
where
delete語句 access中刪除時用:delete * from table
where a>
即只要把select 語句裡的select 換成delete就可以了
sqlserve 中則為: delete from table
where a>
即沒有*號
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後的字段當作一個數據庫字段參與計算
[]與[!]的區別 access中多表聯合查詢時:select tab
!a as tab
a
tab
!b tab
b from tab
tab
中間的AS可以不要
sqlserve 中則:select tab
a as tab
a
tab
b tab
b from tab
tab
中間的AS可以不要
聯合查詢時 access中多表聯合查詢:
select a
b from(
select a
b from tab
where a>
union select c
d from tab
) group by a
b
sqlserve 中則
select a
b from(
select a
b from tab
where a>
union select c
d from tab
) tmptable group by a
b即要加一個虛的表tmptable
表名任意
access升級到sqlserver時可以用sqlserver的數據導入工具導入數據但要做必要的處理 access中的自動編號
不會自動轉換SQL中的自動編號
只能轉換為int型
要把它手工改成標識字段
種子為
把所有導入被sqlserver轉化成的以n開頭的字段類型的n去掉
如nvarchar
>varchar
把需要有秒類型的日期字段改成datatime類型(SQL會把所有的日期開轉化成smalldatetime型)
true與=
access用where true表示條件為真
sqlserver用where
=
表示條件為真
判斷字段值為空的區別 普通空:
Access和sql server一樣 where code is null 或 where code is nol null
條件空:
Access:iif([num] is null
[num]) 或 iif([num] is null
[num
]
[num])
SQLServer: isnull([num]
) 或 isnull([num]
[num
])
SQL語句取子串的區別 access:MID(字段
n
[n
])
LEFT(字段
n)
RIGHT(字段
n)
如:select left(cs
)+
+cs
as cs
SQLServer: SUBSTRING(expression
start
length)
如:select substring(cs
) + substring(cs
) +
+ cs
as cs
附:如何發布基於ADO+SQL SERVER的應用
很多朋友在問如何發布基於ADO+SQL SERVER的應用程序
筆者作了測試
如下:
Win
訪問xp或
K的SQL SERVER
服務器
不用任何SQL的DLL文件
只要保證
能與其它工作組裡的機子正常通信(能訪問另外一台機子裡的共享文件)
這一步是保證
安裝了這三個協議
TCP/IP
SPX/IPX
NETBEUIDG三個協議
我的測試環境是
se+xp
se只安裝了必要的驅動程序
其它的程序一個也沒有裝(專門裝來測試這個的)
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22050.html