Confronto tra SQL per Access e T-SQL per SQL Server
Applies ToAccess per Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Se si esegue la migrazione dei dati di Access a SQL Server o si crea una soluzione Access usando SQL Server come database back-end, è fondamentale conoscere le differenze tra il linguaggio SQL per Access e l'estensione Transact SQL (TSQL) di SQL Server. Di seguito sono elencate le principali varianti che è essenziale conoscere per garantire il corretto funzionamento della soluzione.

Per altre informazioni, vedere Linguaggio SQL per Access: nozioni fondamentali, terminologia e sintassi e Guida di riferimento a Transact-SQL.

Differenze relative a sintassi ed espressioni

Sono presenti alcune differenze relative a sintassi ed espressioni per le quali è richiesta la conversione. La tabella seguente riepiloga le differenze più comuni.

Differenza

SQL per Access

TSQL di SQL Server

Attributo di database relazionale

In genere denominato campo

In genere denominata colonna

Valori letterali stringa

Virgolette ("), ad esempio "Mary Q. Contrary"

Apostrofo ('), ad esempio 'Mary Q. Contrary'

Valori letterali data

Cancelletto (#), ad esempio #01/01/2019#

Apostrofo ('), ad esempio '01/01/2019'

Più caratteri jolly

Asterisco (*), ad esempio "Cath*"

Percentuale (%), ad esempio 'Cath%'

Singolo carattere jolly

Punto interrogativo (?), ad esempio "Cath?"

Carattere di sottolineatura (_), ad esempio "Cath_"

Operatore modulo

Operatore MOD, ad esempio Valore 1 MOD Valore 2

Percentuale (%), ad esempio Valore1 % Valore2

Valori booleani

WHERE Bitvalue = [True | False]

Oppure

WHERE Bitvalue = [-1 | 0]

WHERE Bitvalue = [1 | 0]

Parametri

[<Un nome che non è una colonna definita>]

Oppure

Nella visualizzazione SQL usare la dichiarazione dei parametri SQL

@NomeParametro

Note   

  • Access usa le virgolette (") per racchiudere i nomi e gli oggetti di tabella. T-SQL può usarle per i nomi di tabella contenenti spazi, ma si tratta di una procedura non standard per l'assegnazione dei nomi. Nella maggior parte dei casi i nomi degli oggetti devono essere rinominati senza spazi ed è inoltre necessario riscrivere le query in modo che rispecchino i nuovi nomi di tabella. Usare le parentesi quadre [ ] per le tabelle che non possono essere rinominate ma che non rispettano gli standard di denominazione. Per racchiudere i parametri nelle query, Access usa anche parentesi aggiuntive, che però possono essere rimosse in T-SQL.

  • È consigliabile usare il formato data canonico, ovvero aaaa-mm-gg hh:mm:ss, che corrisponde a uno standard ODBC per le date archiviate come caratteri, in quanto consente di rappresentarle in modo coerente tra più database e mantiene l'ordinamento delle date.

  • Per evitare confusione quando si confrontano valori booleani, è possibile usare il seguente confronto per Access e SQL Server:

    • Test per il valore falso    WHERE Bitvalue = 0

    • Condizione per il valore vero    WHERE Bitvalue <> 0

Valori Null

Un valore Null non corrisponde a un campo vuoto che indica nessun valore, ma è un segnaposto che indica che i dati mancano o sono sconosciuti. I sistemi di database che riconoscono i valori Null implementano la "logica a tre valori", la quale indica che un elemento può essere vero, falso o sconosciuto. Se non si gestiscono in modo corretto i valori Null, i risultati durante i confronti di uguaglianze o la valutazione delle clausole WHERE possono essere errati. Ecco un confronto relativo alla gestione dei valori Null in Access e SQL Server.

Disabilitare i valori Null in una tabella

In Access e SQL Server l'esperienza predefinita prevede che i valori Null siano abilitati. Per disabilitare i valori Null in una colonna della tabella, eseguire le operazioni seguenti:

  • In Access impostare la proprietà Required di un campo su Yes.

  • In SQL Server aggiungere l'attributo NOT NULL a una colonna in un'istruzione CREATE TABLE.

Eseguire il test per i valori Null nella clausola WHERE

Usare i predicati di confronto IS NULL e IS NOT NULL:

  • In Access usare IS NULL o IS NOT NULL. Ad esempio:

    SELECT … WHERE column IS NULL.
  • In SQL Server usare IS NULL o IS NOT NULL. Ad esempio:

    SELECT … WHERE field IS NULL

Convertire i valori Null con le funzioni

Usare le funzioni Null per proteggere le espressioni e restituire valori alternativi:

  • In Access usare la funzione NZ (valore, [valsenull]) che restituisce 0 o un altro valore. Ad esempio:

    SELECT AVG (NZ (Weight, 50) ) FROM Product
  • In SQL Server usare la funzione ISNULL (valore, valore_sostituzione) che restituisce 0 o un altro valore. Ad esempio:

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

Informazioni sulle opzioni di database

Alcuni sistemi di database prevedono meccanismi proprietari:

  • In Access non esistono opzioni di database relative a Null.

  • In SQL Server è possibile usare l'opzione SET ANSI_NULLS OFF per i confronti diretti di uguaglianza con NULL usando gli operatori = e <>. È consigliabile evitare di usare questa opzione dal momento che è deprecata e può confondere altri utenti che si basano sulla gestione dei valori Null conforme alla norma ISO.

Conversione e cast

Quando si lavora con i dati o con la programmazione, è spesso necessario convertire i dati da un tipo di dati a un altro. Il processo di conversione può essere semplice o complesso. I problemi più comuni che è necessario considerare sono: la conversione implicita o esplicita, le impostazioni internazionali di data e orario correnti, l'arrotondamento o il troncamento di numeri e dimensioni dei tipi di dati. È comunque essenziale procedere a un test approfondito e alla conferma dei risultati.

In Access è possibile usare le 11 funzioni di conversione del tipo, ognuna delle quali inizia con la lettera C, una per ogni tipo di dati. Ad esempio, per convertire un numero a virgola mobile in una stringa:

CStr(437.324) returns the string "437.324".

In SQL Server si usano principalmente le funzioni TSQL CAST e CONVERT, anche se esistono altre funzioni di conversione per esigenze specifiche. Ad esempio, per convertire un numero a virgola mobile in una stringa:

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

Funzioni DateAdd, DateDiff e DatePart

Queste funzioni di data di uso comune sono simili (DateAdd, DateDiff e DatePart) in Access e TSQL, ma l'uso del primo argomento è diverso.

  • In Access il primo argomento viene denominato interval ed è costituito da un'espressione stringa che deve essere racchiusa tra virgolette.

  • In SQL Server il primo argomento viene denominato datepart e usa valori parole chiave che non devono essere racchiusi tra virgolette.

    Componente

    Access

    SQL Server

    Anno

    "aaaa"

    anno, aa, aaaa

    Trimestre

    "t"

    trimestre, tt, t

    Mese

    "m"

    mese, mm, m

    Giorno dell'anno

    "a"

    giornoanno, ga, a

    Giorno

    "g"

    giorno, gg, g

    Settimana

    "ss"

    sett, ss

    Giorno della settimana

    "s"

    giorno feriale, gs

    Ora

    "h"

    ora, hh

    Minuto

    "n"

    minuto, mi, n

    Secondo

    "s"

    secondo, ss, s

    Millisecondo

    millisecondo, ms

Confronto di funzioni

Le query di Access possono contenere colonne calcolate che talvolta usano funzioni di Access per ottenere risultati. Quando si esegue la migrazione di query a SQL Server, è necessario sostituire la funzione di Access con una funzione TSQL equivalente, se disponibile. Se non è presente una funzione TSQL corrispondente, in genere è possibile creare una colonna calcolata (termine TSQL per una colonna calcolata) per eseguire le operazioni desiderate. TSQL offre una vasta gamma di funzioni che è utile conoscere per sfruttare le funzionalità disponibili. Per altre informazioni, vedere Quali sono le funzioni del database SQL?.

La tabella seguente elenca le funzioni di Access per cui sono disponibili funzioni TSQL corrispondenti.

Categoria di Access

Funzione di Access

Funzione di TSQL

Conversione

Funzione Chr

CHAR

Conversione

Funzione Day

DAY

Conversione

Funzione FormatNumber

FORMAT

Conversione

Funzione FormatPercent

FORMAT

Conversione

Funzione Str

STR

Conversione

Funzioni di conversione tra tipi

CAST e CONVERT

Data/ora

Funzione Date

CURRENT_TIMESTAMP

Data/ora

Funzione Day

DATEFROMPARTS

Data/ora

Funzione DateAdd

DATEADD

Data/ora

Funzione DateDiff

DATEDIFF

DATEDIFF_BIG

Data/ora

Funzione DatePart

DATEPART

Data/ora

Funzione DateSerial

DATEFROMPARTS

Data/ora

Funzione DateValue

DATENAME

Data/ora

Funzione Hour

TIMEFROMPARTS

Data/ora

Funzione Minute

TIMEFROMPARTS

Data/ora

Funzione Month

MONTH

Data/ora

Funzione Now

SYSDATETIME

Data/ora

Funzione Second

TIMEFROMPARTS

Funzione Time

TIMEFROMPARTS

Data/ora

Funzione TimeSerial

TIMEFROMPARTS

Data/ora

Funzione Weekday

DATEPART

DATENAME

Data/ora

Funzione Year

YEAR

DATEFROMPARTS

Aggregazione sui domini

Funzioni DFirst, DLast

FIRST_VALUE

LAST_VALUE

Funzioni matematiche

Funzione Abs

ABS

Funzioni matematiche

Funzione Atn

ATAN

ATN2

Funzioni matematiche

Funzione Cos

COS

ACOS

Funzioni matematiche

Funzione Exp

EXP

Funzioni matematiche

Funzioni Int e Fix

FLOOR

Funzioni matematiche

Funzione Log

LOG

LOG10

Funzioni matematiche

Funzione Rnd

RAND

Funzioni matematiche

Funzione Round

ROUND

Funzioni matematiche

Funzione Sgn

SIGN

Funzioni matematiche

Funzione Sin

SIN

Funzioni matematiche

Funzione Sqr

SQRT

Flusso esecuzione programma

Funzione Choose

CHOOSE

Flusso esecuzione programma

Funzione IIf

IIF

Funzioni statistiche

Funzione Avg

AVG

Aggregazione SQL

Funzione Count

COUNT

COUNT_BIG

Aggregazione SQL

Funzioni Min, Max

MIN

MAX

Aggregazione SQL

Funzioni StDev, StDevP

STDEV

STDEVP

Aggregazione SQL

Funzione Sum

SUM

Aggregazione SQL

Funzioni Var, VarP

VAR

VARP

Testo

Funzione Format

FORMAT

Testo

Funzione LCase

LOWER

Testo

Funzione Left

LEFT

Testo

Funzione Len

LEN

Testo

Funzioni LTrim, RTrim e Trim

TRIM

LTRIM

RTRIM

Testo

Funzione Replace

REPLACE

Testo

Funzione Right

RIGHT

Testo

Funzione StrReverse

REVERSE

Testo

Funzione UCase

UPPER

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.

Le community aiutano a porre e a rispondere alle domande, a fornire feedback e ad ascoltare gli esperti con approfondite conoscenze.