本文為大家簡單整理了access與sql server的文法區別,希望對大家有幫助。
一、有區別的函數及解決方案
以下所示的解決方案中的函數定義在untDataBase單元中TAdoConn類別的方法中。
二、Access與SQLSERVER部分相同資料庫函數及關鍵字清單
1、函數
2、關鍵字三、Access與語句SqlServer的語句語法區別
1、 Inser Into …..Select …From 語句:
在ACCESS中以下語句
Insert INTO
PubSubJectAccCopys(Copy_id,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Proacc_type,Sub_name,acc_short,Acc_Comment,Acc_Proacc_type,Sub_name,flag_ Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_index FROM PubSubJectAcc Where PubSubJectAcc.co_type='03')
11111150 月中>2000> 03')"中的小括號("(",")")必須去掉才能執行,如下:Insert INTOPubSubJectAccCopys(Copy_id,Acc_id,Acc_Pid,Acc_name,acc_short, Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_index) Select 200201,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_index Fcc_VubScc_Pro,accJ3,Sub_id_flag,中都可以2、 Inner Join 語句1StrSql:='select a.user_id,a.user_opcode,b.copy_name from sysuser a inner join (syscopysuser c inner join syscopys b onuser a inner join (syscopysuser c inner join syscopys b onuser a inner join (syscopysuser c inner join syscopys b onuser a c .copy_id=c.copy_id) on a.user_id=c.user_id wherea.user_opcode=''' EdtUserOpCode.text ''' And copy_name=''' Tmpcopyname '''';#應該改為StrSql:='select a.user_id,a.user_opcode,b.copy_name from sysuser a inner join (syscopysuser c inner join syscopys b on c.copy_id=d.copy_id) on a.user_id=c.user_id wherea.user_opcode=''' EdtUserOpCode.text ''' And copy_name=''' Tmpcopyname '''';該行程式碼的檢索條件錯誤:應該把C.copy_id=C.Copy_id 改為c.copy_id=d.copy_id註:兩種寫法都能在SQL-SERVER中運行,但c.copy_id=C.copy_id在ACCESS中不能執行3、 Inner Join 語句2StrSql:='select copy_year,copy_name,a.copy_id from SysCopys a inner join SysCopysUser b on a.curcopy_flag=1 and a. copy_id=b.copy_id where b.user_id=' '''' TmpPubUserID '''';該為StrSql:='select copy_year,copy_name,a.copy_id from SysCopys a inner join SysCopysUser b on a.copy_id=b.copy_id where a.curcopy_flag=''1'' and b.user_id=' '''' TmpPubUserID '''';#註:兩種寫法都能在SQL-SERVER中運行,但第一種在ACCESS中不能運行4、 Inner Join語句3SQl server 中可以執行以下語句'Select distinct sysoption.opti_id,sysoption.opti_name,sysoption.opti_code,sysroleoption.opti_sort From sysoption inner join sysroleoption ON sysoption.opti_id=sysroleoption.opti_id AND sysleoption. 'Select distinct sysoption.opti_id,sysoption.opti_name,sysoption.opti_code,sysroleoption.opti_sort From sysoption inner join sysroleoption ON sysoption.opti_id=sysroleoption.opti_leoption. #5、 Update語句Sql SerVer 中能執行但Access 中不能'Update sysuserrole SET sysuserrole.role_sort = (Select sysrole.role_sort FROM sysrole Where sysuser sysuserrole.user_id='01')'6、 日期比較SQL SERVER 中用StrSql:='select copy_year,Start_month,Cur_month,Start_Flag,Start_date, End_date ' 'From SysCopys ' 'where copy_id=''' LoginCopyID ''' ' 'and start_date 'and end_date>=''' datetostr(LoginDate) '''';######ACCESS中用######StrSql:='select copy_year,Start_month,Cur_month ,Start_Flag,Start_date,End_date '###### 'From SysCopys '###### 'where copy_id=''' LoginCopyID ''' '##### 'and start_date=#' datetostr(LoginDate) '#'###參考以上的第10個函數「GetDateStr」
7、 最大數值取得語句
StrSql:='insert into sysRoleOption '
'select ''' fidRoleId ''' as Role_ID,opti_id,'
'convert(numeric,opti_id)-(convert(numeric,opti_parentid)*100) ' MaxOptiSort
' as opti_Sort from sysoption where opti_parent '''
PCoTypeID(self.trvRoles.Selected.data)^.StrCoTypeID
''' and opti_bottom=''1' '''';
#改為
StrSql:='insert into sysRoleOption '
'select ''' fidRoleId ''' as Role_ID,opti_id,'
'opti_id-opti_parentid*100 ' MaxOptiSort
' as opti_sort from sysoption where opti_parentid='''
PCoTypeID(self.trvRoles.Selected.data)^.StrCoTypeID
# ''' and opti_bottom='' 1' ''''
註:兩種寫法都能在SQL-SERVER中運行,但第一種在ACCESS中不能運行
#但是考慮會出現Null值以及語句的通用性,可以使用以上的第07個函數「GetNullStr」和第09個函數「GetConvertStr」來完成字串向數字,空值和0數字的轉換:參考GetNextNumStr程式碼。
1、Sql中不能省略as
2、一次只能執行一條Sql
3、沒有substring、cast等函數
4、sql中嚴格區分整形和字元型
5、沒有預存程序、觸發器
6、! = 替換為
7、時間字串兩邊加#號
8、帶參數的sql語句中@用?號替換
以上是access與sql server的語法對比的詳細內容。更多資訊請關注PHP中文網其他相關文章!