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