Comparaison d’Access SQL avec SQL Server TSQL

Comparaison d’Access SQL avec SQL Server TSQL

Si vous migrez vos données Access vers SQL Server ou créez une solution Access avec SQL Server comme base de données principale, vous devez absolument connaître les différences entre Access SQL et SQL Server Transact SQL (T-SQL). Voici les principales différences à savoir pour assurer un bon fonctionnement de votre solution.

Si vous souhaitez en savoir plus, consultez les articles Access SQL : concepts de base, vocabulaire et syntaxe et Référence Transact-SQL.

Différences de syntaxe et d’expression

Certaines différences de syntaxe et d’expression nécessitent une conversion. Le tableau ci-dessous recense les plus courantes.

Différence

Access SQL

SQL Server T-SQL

Attribut de base de données relationnelle

Généralement appelé champ

Généralement appelé colonne

Littéraux de chaîne

Guillemet droit double ("), par exemple : "Marie Q. Contraire"

Apostrophe ou guillemet droit simple ('), par exemple : 'Marie Q. Contraire'

Littéraux de date

Symbole dièse (#), par exemple : #01/01/2019#

Apostrophe ou guillemet droit simple ('), par exemple : '01/01/2019'

Caractère générique valant plusieurs caractères

Astérisque (*), par exemple : "Cath*"

Symbole de pourcentage (%), par exemple : 'Cath%'

Caractère générique valant pour un seul caractère

Point d’interrogation (?), par exemple : "Cath?"

Trait de soulignement (_), par exemple : "Cath_"

Opérateur modulo

Opérateur MOD, par exemple : Valeur1 MOD Valeur2

Symbole de pourcentage (%), par exemple : Valeur1 % Valeur2

Valeurs booléennes

WHERE BitValue = [True | False]

Ou

WHERE BitValue = [-1 | 0]

WHERE Bitvalue = [1 | 0]

Paramètres

[<Un nom qui n’est pas une colonne définie>]

Ou

En mode SQL, utilisez la déclaration SQL PARAMETERS

@ParamName

Remarques   

  • Dans Access, les noms de tables et d’objets sont encadrés par des guillemets droits ("). Cela est possible dans T-SQL pour les noms de tables comportant des espaces. Cependant, cette convention de nommage est rare. Dans la plupart des cas, les noms d’objets doivent être renommés sans espace, mais les requêtes doivent également être réécrites pour refléter les nouveaux noms de tables. Utilisez des crochets [ ] pour les tables qui ne peuvent pas être renommées, mais qui ne sont pas conformes aux conventions de nommage. Dans les requêtes Access, les paramètres sont encadrés par des parenthèses. Elles peuvent être supprimées dans T-SQL.

  • Nous vous conseillons d’utiliser le format de date canonique, yyyy-mm-jj hh:nn:ss (année-mois-jour heures:minutes:secondes). Il s’agit d’une norme ODBC pour les dates stockées sous forme de caractères. Elle permet de les représenter de façon cohérente dans les bases de données et de conserver l’ordre de tri des dates.

  • Pour éviter toute confusion lors de la comparaison de valeurs booléennes, vous pouvez utiliser la comparaison suivante pour Access et SQL Server :

    • Tester la valeur false    WHERE Bitvalue = 0

    • Tester la valeur true    WHERE Bitvalue <> 0

Valeurs NULL

Une valeur NULL n’est pas un champ vide qui signifie « aucune valeur ». Une valeur NULL est un espace réservé qui signifie que des données sont manquantes ou inconnues. Les systèmes de base de données qui reconnaissent les valeurs NULL implémentent une « logique ternaire». Cela signifie que vous pouvez utiliser la valeur « true » (« vrai »), « false » (« faux ») ou « unknown » (« inconnu »). Si vous ne gérez pas correctement les valeurs NULL, vous risquez d’obtenir des résultats incorrects lorsque vous faites des comparaisons d’égalité ou évaluez des clauses WHERE. Voici une comparaison de la façon dont Access et SQL Server gèrent les valeurs NULL.

Désactiver les valeurs NULL dans une table

Dans Access et SQL Server, les valeurs NULL sont activées par défaut. Pour désactiver les valeurs NULL dans la colonne d’une table, procédez comme suit :

  • Dans Access, définissez la propriété d’un champ Required (Obligatoire) sur Yes (Oui).

  • Dans SQL Server, ajoutez l’attribut NOT NULL à une colonne dans une instruction CREATE TABLE.

Tester les valeurs NULL dans une clause WHERE

Utilisez les prédicats de comparaison IS NULL et IS NOT NULL :

  • Dans Access, utilisez IS NULL ou IS NOT NULL. Par exemple :

    SELECT … WHERE column IS NULL.
  • Dans SQL Server, utilisez IS NULL ou IS NOT NULL. Par exemple :

    SELECT … WHERE field IS NULL

Convertir des valeurs NULL à l’aide de fonctions

Utilisez les fonctions NULL pour protéger vos expressions et retourner d’autres valeurs :

  • Dans Access, utilisez la fonction NZ (value, [valueifnull]) qui renvoie 0 ou une autre valeur. Par exemple :

    SELECT AVG (NZ (Weight, 50) ) FROM Product
  • Dans SQL Server, utilisez la fonction ISNULL (Value, replacement_value) qui renvoie 0 ou une autre valeur. Par exemple :

    SELECT AVG (ISNULL (Weight, 50)) FROM Product

Comprendre les options de base de données

Certains systèmes de base de données disposent de mécanismes propriétaires :

  • Dans Access, aucune option de base de donnée n’est associée à NULL.

  • Dans SQL Server, vous pouvez utiliser l’option SET ANSI_NULLS OFF pour les comparaisons d’égalité directe avec NULL à l’aide des opérateurs = et <>. Nous vous déconseillons d’utiliser cette option, car elle est obsolète et peut induire en erreur les personnes qui se fient à la conformité ISO pour la gestion des valeurs NULL.

Conversion et cast

Si vous travaillez avec des données ou un langage de programmation, vous devrez forcément convertir un type de données en un autre à un moment donné. Le processus de conversion peut être simple ou complexe. Voici les principaux problèmes et choix auxquels vous devrez réfléchir : opter pour une conversion implicite ou explicite, gérer les paramètres régionaux de date et d’heure, opter pour un arrondi ou une troncation des nombres, et gérer les tailles de type de données. Aucun substitut n’est disponible pour tester et confirmer vos résultats de façon approfondie.

Access propose 11 fonctions de conversion de type sont disponibles. Elles commencent toutes par la lettre C. Chacune d’elle correspond à un type de données. Par exemple, pour convertir un nombre à virgule flottante en chaîne :

CStr(437.324) returns the string "437.324".

Dans SQL Server, vous utilisez principalement les fonctions T-SQL CAST et CONVERT, même s’il existe d’autres fonctions de conversion pour répondre à des besoins spécifiques. Par exemple, pour convertir un nombre à virgule flottante en chaîne :

CONVERT(TEXT, 437.324) returns the string "437.324"

vous pouvez utiliser les fonctions DateAdd, DateDiff et DatePart

Ces fonctions de date fréquemment utilisées sont similaires (DateAdd, DateDiff et DatePart) dans Access et T-SQL, à l’exception de l’utilisation de leur premier argument.

  • Dans Access, le premier argument est appelé interval et représente une expression de chaîne qui nécessite des guillemets.

  • Dans SQL Server, le premier argument est appelé datepartet utilise des valeurs de mot clé qui n’ont pas besoin de guillemets.

    Composant

    Access

    SQL Server

    Année

    "yyyy"

    year, yy, yyyy

    Trimestre

    "q"

    quarter, qq, q

    Mois

    "m"

    month, mm, m

    Jour de l’année

    "y"

    dayofyear, dy, y

    Jour

    "d"

    day, dd, d

    Semaine

    "ww"

    wk, ww

    Jour de la semaine

    "w"

    weekday, dw

    Heure

    "h"

    hour, hh

    Minute

    "n"

    minute, mi, n

    Seconde

    "s"

    second, ss, s

    Milliseconde

    millisecond, ms

Comparaison de fonctions

Les requêtes Access peuvent contenir des colonnes calculées qui utilisent parfois des fonctions Access pour obtenir des résultats. Lorsque vous migrez des requêtes vers SQL Server, vous devez remplacer la fonction Access par une fonction T-SQL équivalente si celle-ci est disponible. S’il n’y a pas de fonction T-SQL correspondante, vous pouvez généralement créer une colonne calculée pour faire ce que vous souhaitez. T-SQL inclut un large éventail de fonctions qu’il est bon de connaître. Veuillez consulter la page suivante pour obtenir plus d’informations : Quelles sont les fonctions de base de données SQL ?.

Le tableau suivant indique les fonctions Access auxquelles correspondent des fonctions T-SQL.

Catégorie Access

Fonction Access

Fonction T-SQL

Conversion

Fonction Chr

CHAR

Conversion

Fonction Day

DAY

Conversion

Fonction FormatNumber

FORMAT

Conversion

Fonction FormatPercent

FORMAT

Conversion

Fonction Str

STR

Conversion

Fonctions de conversion de types de données

CAST et CONVERT

Date/Heure

Fonction Date

CURRENT_TIMESTAMP

Date/Heure

Fonction Day

DATEFROMPARTS

Date/Heure

Fonction DateAdd

DATEADD

Date/Heure

Fonction DateDiff

DATEDIFF

DATEDIFF_BIG

Date/Heure

Fonction DatePart

DATEPART

Date/Heure

Fonction DateSerial

DATEFROMPARTS

Date/Heure

Fonction DateValue

DATENAME

Date/Heure

Fonction Hour

TIMEFROMPARTS

Date/Heure

Fonction Minute

TIMEFROMPARTS

Date/Heure

Fonction Month

MONTH

Date/Heure

Fonction Now

SYSDATETIME

Date/Heure

Fonction Second

TIMEFROMPARTS

Fonction Time

TIMEFROMPARTS

Date/Heure

Fonction TimeSerial

TIMEFROMPARTS

Date/Heure

Fonction Weekday

DATEPART

DATENAME

Date/Heure

Fonction Year

YEAR

DATEFROMPARTS

Agrégation de domaine

Fonctions DFirst, DLast

FIRST_VALUE

LAST_VALUE

Math

Fonction Abs

ABS

Math

Fonction Atn

ATAN

ATN2

Math

Fonction Cos

COS

ACOS

Math

Fonction Exp

EXP

Math

Fonctions Int, Fix

FLOOR

Math

Fonction Log

LOG

LOG10

Math

Fonction Rnd

RAND

Math

Fonction Round

ROUND

Math

Fonction Sgn

SIGN

Math

Fonction Sin

SIN

Math

Fonction Sqr

SQRT

Déroulement de programme

Fonction Choose

CHOOSE

Déroulement de programme

Fonction IIf

IIF

Statistiques

Fonction Avg

AVG

Agrégat SQL

Fonction Count

COUNT

COUNT_BIG

Agrégat SQL

Fonctions Min, Max

MIN

MAX

Agrégat SQL

Fonctions StDev, StDevP

STDEV

STDEVP

Agrégat SQL

Fonction Sum

SUM

Agrégat SQL

Fonctions Var, VarP

VAR

VARP

Texte

Fonction Format

FORMAT

Texte

Fonction LCase

LOWER

Texte

Fonction Left

LEFT

Texte

Fonction Len

LEN

Texte

Fonctions LTrim, RTrim et Trim

TRIM

LTRIM

RTRIM

Texte

Fonction Replace

REPLACE

Texte

Fonction Right

RIGHT

Texte

Fonction StrReverse

REVERSE

Texte

Fonction UCase

UPPER

Besoin d’aide ?

Développez vos compétences dans Office
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoignez le programme Office Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×