Maison > Article > Les sujets > Comparaison de syntaxe entre l'accès et le serveur SQL
Cet article résume brièvement les différences de syntaxe entre l'accès et le serveur SQL. J'espère qu'il sera utile à tout le monde.
1. Fonctions et solutions différenciées
Les fonctions de la solution ci-dessous sont définies dans la méthode de la classe TAdoConn dans l'unité untDataBase.
2. Fonctions de base de données et listes de mots clés partiellement identiques entre Access et SQLSERVER
1. 🎜>2. Mots clés
3. La différence de syntaxe d'instruction entre Access et SqlServer
1. 🎜>L'instruction suivante dans ACCESS
Insert INTO
PubSubJectAccCopys(Copy_id,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_index) (Sélectionnez 20 0201 , 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')
中后"(sélectionnez 200201******.co_Type= ' 03')" doit être supprimé pour être exécuté, comme suit :
Insérer INTO
PubSubJectAccCopys(Copy_id,Acc_id,Acc_Pid,Acc_name,acc_short, Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_index) Sélectionnez 200201,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub_id_flag,acc_index FROM PubSubJectAcc Où PubSubJectAcc.co_type='03'
Dans SQL SERVER Tout est possible
2. Instruction de jointure interne 1
StrSql:='select a.user_id,a.user_opcode,b.copy_name de sysuser une jointure interne (syscopysuser c inner join syscopys b sur c .copy_id=c.copy_id) sur a. user_id=c.user_id où
a.user_opcode=''' +EdtUserOpCode.text+''' Et copy_name='''+Tmpcopyname +''''
doit être remplacé par
StrSql:='select a.user_id,a.user_opcode,b.copy_name de sysuser une jointure interne (syscopysuser c inner join syscopys b sur c.copy_id=d. copy_id) sur a.user_id=c. user_idwhere
a.user_opcode=''' +EdtUserOpCode.text+''' Et copy_name='''+Tmpcopyname +'''';
La condition de recherche de cette ligne de code est faux : C.copy_id=C.Copy_id doit être remplacé par c.copy_id=d.copy_id
Remarque : les deux méthodes d'écriture peuvent être exécutées dans SQL-SERVER, mais c.copy_id=C.copy_id ne peut pas l'être. exécuter dans ACCESS
3. Instruction de jointure interne 2
StrSql:='select copy_year,copy_name,a.copy_id de SysCopys une jointure interne SysCopysUser b sur a. =b.copy_id où b.user_id=' + '''' +TmpPubUserID+ '''';
Cela devrait être
StrSql:='select copy_year, copy_name,a.copy_id from SysCopys une jointure interne SysCopysUser b sur a.copy_id=b.copy_id où a.curcopy_flag=''1'' et b.user_id=' + '''' +TmpPubUserID+ '''';
Remarque : Les deux méthodes d'écriture peuvent être exécutées dans SQL-SERVER, mais la première ne peut pas être exécutée dans ACCESS
4 Instruction Inner Join 3
Peut être exécutée dans le serveur SQL Les instructions suivantes
. 'Sélectionnez la distribution sysoption.opti_id, sysoption.Opti_name, Sysoption.Opti_Code, SysroleOption.Opti_SORT FROM SYSOPTION Inner Join Option sur Sysoption.Opti_id = Sysroleoption.Opti_id et SysroleOption.role_id =: Roleid 'Mais pas dans ACCESS, uniquement 'Sélectionnez sysoption.opti_id,sysoption.opti_name,sysoption.opti_code,sysroleoption.opti_sort distincts De sysoption, jointure interne à sysroleoption ON sysoption.opti_id=sysroleoption.opti_id Où sysroleoption. 🎜>
5. L'instruction de mise à jour
peut être exécutée dans Sql SerVer mais ne peut pas être exécutée dans Access
'Update sysuserrole SET sysuserrole.role_sort = (Sélectionnez sysrole.role_sort FROM sysrole Où sysuserrole .role_id = sysrole.role_id et sysuserrole.user_id='01')'
6. Comparaison de dates
Utilisé dans SQL SERVER
StrSql:='select copy_year,Start_month ,Cur_month,Start_Flag,Start_date,End_date '
+'From SysCopys '
+'where copy_id='''+LoginCopyID+''' '
+ 'et start_date< ;='''+datetostr(LoginDate)+''' '
+'and end_date>='''+datetostr(LoginDate)+''';
Utiliser
StrSql:='select copy_year,Start_month,Cur_month,Start_Flag,Start_date,End_date '
+'From SysCopys '
+'where copy_id='' dans ACCESS '+LoginCopyID+' '' '
+'et start_date
+'et end_date>=#'+datetostr(LoginDate)+ '#'
Référez-vous à la 10ème fonction "GetDateStr" ci-dessus
7. Déclaration d'acquisition de la valeur maximale
StrSql:='insert into sysRoleOption '
+'select '' ' +fidRoleId+''' comme Role_ID,opti_id,'
+'convert(numeric,opti_id)-(convert(numeric,opti_parentid)*100)+'+ MaxOptiSort
+' comme opti_Sort de sysoption où opti_parentid='''
+PCoTypeID(self.trvRoles.Selected.data)^.StrCoTypeID
+''' et opti_bottom=''1'+''' ' ;
changé en
StrSql:='insert into sysRoleOption '
+'select '''+fidRoleId+''' as Role_ID,opti_id,'
+'opti_id-opti_parentid*100+'+ MaxOptiSort
+' comme opti_sort de sysoption où opti_parentid='''
+PCoTypeID(self.trvRoles.Selected.data)^ . StrCoTypeID
+''' et opti_bottom=''1'+''''
Remarque : les deux méthodes d'écriture peuvent s'exécuter dans SQL-SERVER, mais la première fonctionne dans ACCESS. Elle ne peut pas être exécuté dans
Cependant, compte tenu de l'occurrence de valeurs Null et de la polyvalence de l'instruction, vous pouvez utiliser la 07ème fonction "GetNullStr" et la 09ème fonction "GetConvertStr" ci-dessus pour terminer la conversion des chaînes. en nombres, valeurs nulles et Conversion de nombres 0 : reportez-vous au code GetNextNumStr.
1. Comme ne peut pas être omis dans SQL
2 Un seul SQL peut être exécuté à la fois
3 Il n'y a pas de sous-chaîne, de conversion et d'autres fonctions
4. types entiers et caractères en SQL
5. Aucune procédure stockée ni déclencheur
6.! = Remplacer par
7. Ajoutez des signes # des deux côtés de la chaîne de temps
8. Dans l'instruction SQL avec les paramètres, remplacez @ par le signe ?
Recommandations associées : tutoriel d'accès à la base de données
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!