Comparando o Access SQL com o SQL Server TSQL
Applies ToAccess para Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Se você migrar seus dados do Access para o SQL Server ou criar uma solução do Access com o SQL Server como o banco de dados de back-end, é essencial saber as diferenças entre o Access SQL e o SQL Server Transact SQL (TSQL). O que se segue são as variações importantes que você precisa saber para que sua solução funcione como pretendido.

Para obter mais informações, confira SQL do Access: conceitos básicos, vocabulário e sintaxe e Referência do Transact-SQL.

Diferenças de sintaxe e expressão

Existem algumas diferenças de sintaxe e expressão que exigem conversão. A tabela a seguir resume as mais comuns.

Diferença

Access SQL

SQL Server TSQL

Atributo do banco de dados relacional

Geralmente chamado de campo

Geralmente chamado de coluna

Literais de cadeia de caracteres

Aspas ("), como em "Mary Q. Contrary"

Apóstrofo ('), como em 'Mary Q. Contrary'

Literais de data

Cerquilha (#), como em #01/01/2019#

Apóstrofo ('), como em '01/01/2019'

Vários caracteres curinga

Asterisco (*), como em "Cath*"

Porcentagem (%), como em 'Cath%'

Único caractere curinga

Ponto de interrogação (?), Como em "Cath?"

Sublinhado (_), como em "Cath_"

Operador Modulo

Operador MOD, como em Value1 MOD Value2

Porcentagem (%), como em Value1 % Value2

Valores booleanos

WHERE Bitvalue = [True | False]

Ou

WHERE Bitvalue = [-1 | 0]

WHERE Bitvalue = [1 | 0]

Parâmetros

[<Um nome que não é uma coluna definida>]

Ou

No modo SQL, use a declaração de parâmetros SQL

@ParamName

Notas   

  • O Access usa aspas (") ao redor de nomes e objetos de tabelas. O T-SQL pode usá-los para nomes de tabelas com espaços, mas essa não é uma prática de nomenclatura padrão. Na maioria dos casos, os nomes dos objetos devem ser renomeados sem espaços, mas as consultas também devem ser reescritas para refletir os novos nomes das tabelas. Use colchetes [ ] para tabelas que não podem ser renomeadas, mas que não estão em conformidade com os padrões de nomenclatura. O Access também adiciona parênteses extras em torno de parâmetros em consultas, mas eles podem ser removidos no T-SQL.

  • Considere o uso do formato de data canônico, aaaa-mm-dd hh:nn:ss, que é um padrão ODBC para datas armazenadas como caracteres que fornece uma maneira consistente de representá-las entre bancos de dados e preserva a ordem de classificação da data.

  • Para evitar confusão ao comparar valores booleanos, você pode usar a seguinte comparação para o Access e o SQL Server:

    • Teste de valor falso    WHERE Bitvalue = 0

    • Teste de valor verdadeiro    WHERE Bitvalue <> 0

Valores nulos

Um valor nulo não é um campo vazio que significa "nenhum valor". Um valor nulo é um espaço reservado que significa que os dados estão ausentes ou são desconhecidos. Os sistemas de banco de dados que reconhecem valores nulos implementam a “lógica de três valores”, o que significa que algo pode ser verdadeiro, falso ou desconhecido. Se você não manipular corretamente os valores nulos, poderá obter resultados incorretos ao fazer comparações de igualdade ou avaliar as cláusulas WHERE. Aqui está uma comparação de como o Access e o SQL Server manipulam valores nulos.

Desabilitar valores nulos em uma tabela

no Access e no SQL Server, a experiência padrão é os valores nulos estarem habilitados. Para desabilitar valores nulos em uma coluna da tabela, faça o seguinte:

  • No Access, defina a propriedade Obrigatório de um campo como Sim.

  • No SQL Server, adicione o atributo NOT NULL a uma coluna em uma instrução CREATE TABLE.

Teste para valores nulos em uma cláusula WHERE

Use os predicados de comparação IS NULL e IS NOT NULL:

  • No Access, use IS NULL ou IS NOT NULL. Por exemplo:

    SELECT … WHERE column IS NULL.
  • No SQL Server, use IS NULL ou IS NOT NULL. Por exemplo:

    SELECT … WHERE field IS NULL

Converter valores nulos com funções

Use as funções null para proteger suas expressões e retornar valores alternativos:

  • No Access, use a função NZ (value, [valueifnull]) que retorna 0 ou outro valor. Por exemplo:

    SELECT AVG (NZ (Weight, 50) ) FROM Product
  • No SQL Server, use a função ISNULL (Value, replacement_value) que retorna 0 ou outro valor. Por exemplo:

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

Entenda as opções do banco de dados

Alguns sistemas de banco de dados possuem mecanismos proprietários:

  • No Access, não há opções de banco de dados relacionadas a Null.

  • No SQL Server, você pode usar a opção ATIVAR ANSI_NULLS para comparações de igualdade direta com o NULL usando os operadores = e < >. Recomendamos que você evite usar essa opção porque ela está obsoleta e pode confundir outras pessoas que dependem do tratamento de null compatível com ISO.

Conversão e transmissão

Sempre que você estiver trabalhando com dados ou programação, há uma necessidade persistente de converter de um tipo de dados para outro. O processo de conversão pode ser simples ou complexo. Problemas comuns que você precisa considerar são: conversão implícita ou explícita, configurações regionais atuais de data e hora, arredondamento ou truncamento de números e tamanhos de tipo de dados. Não há substituto para testes completos e confirmação de seus resultados.

No Access, você usa as funções de conversão de tipo, das quais há onze, cada uma começando com a letra C e uma para cada tipo de dados. Por exemplo, para converter um número de ponto flutuante em uma cadeia de caracteres:

CStr(437.324) returns the string "437.324".

No SQL Server, você usa principalmente as funções TSQL CAST e CONVERT, embora haja outras funções de conversão para necessidades especializadas. Por exemplo, para converter um número de ponto flutuante em uma cadeia de caracteres:

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

Funções DateAdd, DateDiff e DatePart

Essas funções de data comumente usadas são semelhantes (DateAdd, DateDiff e DatePart) no Access e TSQL, mas o uso do primeiro argumento é diferente.

  • No Access, o primeiro argumento é chamado de intervalo e é uma expressão de cadeia de caracteres que exige aspas.

  • No SQL Server, o primeiro argumento é chamado de datepart e ele usa valores de palavras-chave que não exigem aspas.

    Componente

    Access

    SQL Server

    Ano

    "yyyy"

    ano, yy, yyyy

    Trimestre

    "q"

    trimestre, qq, q

    Mês

    "m"

    mês, mm, m

    Dia do ano

    "y"

    dia do ano, dy, y

    Dia

    "d"

    dia, dd, d

    Semana

    "ww"

    wk, ww

    Dia da semana

    "w"

    dia da semana, dw

    Hora

    "h"

    hora, hh

    Minuto

    "n"

    minuto, mi, n

    Segundo

    "s"

    segundo, ss, s

    Milissegundo

    milissegundo, ms

Comparação de funções

As consultas do Access podem conter colunas calculadas que, às vezes, usam as Funções do Access para obter resultados. Quando você migrar consultas para o SQL Server, você precisará substituir a função do Access por uma função TSQL equivalente, se houver uma disponível. Se não houver nenhuma função TSQL correspondente, você poderá criar uma coluna computada (o termo TSQL usado para uma coluna calculada) para fazer o que quiser. O TSQL tem uma ampla variedade de funções e é interessante para você ver o que está disponível. Para mais informações, confira Quais são as funções do banco de dados SQL?.

A tabela a seguir mostra qual função do Access tem uma função TSQL correspondente.

Categoria do Access

Função do Access

Função TSQL

Conversão

Função Chr

CHAR

Conversão

Função Day

DAY

Conversão

Função FormatNumber

FORMATO

Conversão

Função FormatPercent

FORMATO

Conversão

Função Str

STR

Conversão

Funções de conversão de tipo

CAST e CONVERT

Data/Hora

Função Date

CURRENT_TIMESTAMP

Data/Hora

Função Day

DATEFROMPARTS

Data/Hora

Função DateAdd

DATEADD

Data/Hora

Função DateDiff

DATEDIFF

DATEDIFF_BIG

Data/Hora

Função DatePart

DATEPART

Data/Hora

Função DateSerial

DATEFROMPARTS

Data/Hora

Função DateValue

DATENAME

Data/Hora

Função Hour

TIMEFROMPARTS

Data/Hora

Função Minute

TIMEFROMPARTS

Data/Hora

Função Month

MONTH

Data/Hora

Função Now

SYSDATETIME

Data/Hora

Função Second

TIMEFROMPARTS

Função Time

TIMEFROMPARTS

Data/Hora

Função TimeSerial

TIMEFROMPARTS

Data/Hora

Função Weekday

DATEPART

DATENAME

Data/Hora

Função Year

YEAR

DATEFROMPARTS

Domínio Agregado

Funções DFirst, DLast

FIRST_VALUE

LAST_VALUE

Matemática

Função Abs

ABS

Matemática

Função Atn

ATAN

ATN2

Matemática

Função Cos

COS

ACOS

Matemática

Função Exp

EXP

Matemática

Funções Int, Fix

FLOOR

Matemática

Função Log

LOG

LOG10

Matemática

Função Rnd

RAND

Matemática

Função Round

ROUND

Matemática

Função Sgn

SIGN

Matemática

Função Sin

SIN

Matemática

Função Sqr

SQRT

Fluxo do Programa

Função Choose

CHOOSE

Fluxo do Programa

Função IIf

IIF

Estatística

Função Avg

AVG

Agregado SQL

Função Count

COUNT

COUNT_BIG

Agregado SQL

Funções Min, Max

MIN

MAX

Agregado SQL

Funções StDev, StDevP

STDEV

STDEVP

Agregado SQL

Função Soma

SUM

Agregado SQL

Funções Var, VarP

VAR

VARP

Texto

Função Format

FORMATO

Texto

Função LCase

LOWER

Texto

Função Left

LEFT

Texto

Função Len

LEN

Texto

Funções LTrim, RTrim e Trim

TRIM

LTRIM

RTRIM

Texto

Função Replace

REPLACE

Texto

Função Right

RIGHT

Texto

Função StrReverse

REVERSE

Texto

Função UCase

UPPER

Precisa de mais ajuda?

Quer mais opções

Explore os benefícios da assinatura, procure cursos de treinamento, saiba como proteger seu dispositivo e muito mais.

As comunidades ajudam você a fazer e responder perguntas, fazer comentários e ouvir especialistas com conhecimento avançado.