Comparação do SQL do Access com o SQL Server TSQL
Applies ToAccess para Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Se migrar os seus dados do Access para o SQL Server, ou se criar uma solução do Access com o SQL Server como base de dados de back-end, é essencial que conheça as diferenças entre o SQL do Access e o Transact SQL (TSQL) do SQL Server. O que se segue são as diferenças importantes que precisa de ter em conta para que a sua solução funcione conforme pretendido.

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

Diferenças de sintaxe e de expressões

Existem algumas diferenças na sintaxe e em expressões que requerem conversão. A tabela seguinte resume as mais comuns.

Diferença

SQL do Access

TSQL do SQL Server

Atributo da base de dados relacional

Normalmente denominado campo

Normalmente denominado coluna

Cadeias de caracteres literais

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

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

Datas literais

Símbolo cardinal (#), como em #01/01/2019#

Apóstrofe ('), como em "01/01/2019"

Carácter universal múltiplo

Asterisco (*), tal como em "Cath *"

Símbolo percentual (%), tal como em 'Cath%'

Carácter universal único

Ponto de Interrogação (?), como em "Cath?"

Símbolo de sublinhado (_), como em "Cath_"

Operador de resto

Operador MOD, como em Value1 MOD Valor2

Percentagem (%), como em Valor1 % Valor2

Valores booleanos

WHERE Bitvalue = [True | False]

Ou

WHERE Bitvalue = [-1 | 0]

WHERE Bitvalue = [1 | 0]

Parâmetros

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

Ou

Na vista SQL, utilize a Declaração de Parâmetros SQL

@ParamName

Notas   

  • No Access, nomes de tabelas e objetos vêm entre aspas (“). Com o T-SQL pode utilizar aspas para os nomes de tabelas que contenham espaços, mas esta não é uma prática de designação padrão. Na maioria dos casos, os nomes de objetos devem ser alterados para nomes que não contenham espaços mas, neste caso, as consultas também têm de ser reescritas para refletir os novos nomes das tabelas. Utilize parênteses [ ] 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 adicionais em torno de parâmetros nas consultas mas, com o T-SQL, estes podem ser removidos.

  • Pondere utilizar o formato de data canónico, aaaa-mm-dd hh: hh:mm:ss, que é um padrão ODBC para datas armazenadas como carateres, e que fornece uma forma consistente de representa-las em bases de dados preservando a sequência de ordenação das datas.

  • Para evitar confusão ao comparar valores Booleanos, pode utilizar a seguinte comparação para o Access e para o SQL Server:

    • Testar se o valor é falso    WHERE Bitvalue = 0

    • Testar se o valor é verdadeiro    WHERE Bitvalue <> 0

Valores nulos

Um valor nulo não é um campo vazio que significa "nenhum valor". Um valor nulo é um marcador de posição que indica que os dados estão em falta ou são desconhecidos. Os sistemas de base de dados que reconhecem valores nulos implementam "lógica de três valores", o que significa que algo pode ser verdadeiro, falso ou desconhecido. Se não manipular corretamente valores nulos, pode obter resultados incorretos ao efetuar comparações de igualdade ou ao avaliar cláusulas WHERE. Segue-se uma comparação de como o Access e o SQL Server tratam valores nulos.

Desativar valores nulos numa tabela

No Access e no SQL Server, os valores nulos estão ativados por defeito. Para desativar os valores nulos numa coluna de uma tabela, faça o seguinte:

  • No Access, altere a propriedade Necessário de um campo para Sim.

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

Testar se existem valores nulos numa cláusula WHERE

Compare utilizando É NULO e NÃO É NULO:

  • No Access, use É NULO ou NÃO É NULO. 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 usando funções

Utilize as funções nulas para proteger as suas expressões e devolver valores alternativos:

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

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

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

Compreender as opções da Base de Dados

Alguns sistemas de base de dados têm mecanismos registados:

  • No Access, não existem opções de base de dados que digam respeito aos valores Nulos.

  • No SQL Server pode utilizar a opção SET ANSI_NULLS OFF para comparações de igualdade direta com NULL, ao utilizar os operadores = e < >. Recomendamos que evite utilizar esta opção, uma vez que esta foi descontinuada, podendo confundir outras pessoas que dependam do tratamento de nulos compatível com a norma ISO.

Conversão e coerção

Sempre que está a trabalhar com dados ou com programação, há uma necessidade persistente de efetuar conversões de um tipo de dados para outro. O processo de conversão pode ser simples ou complexo. Os problemas comuns que precisa considerar são: conversão implícita ou explícita, as definições regionais de data e hora, arredondamento ou truncamento de números, e tamanhos de tipos de dados. Não existe nada que substitua testes rigorosos e confirmação de resultados.

No Access, pode usar as Funções de Conversão de Tipo, das quais existem onze, cada uma começando com a letra C, uma para cada tipo de dados. Por exemplo, para converter um número de vírgula flutuante numa cadeia de caracteres:

CStr(437.324) returns the string "437.324".

No SQL Server, vai usar principalmente as funções TSQL CAST and CONVERT, embora existam outras Funções de Conversão para necessidades específicas. Por exemplo, para converter um número de vírgula flutuante numa cadeia de caracteres:

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

Funções SomData, DateDiff e PartData

Estas funções de data frequentemente utilizadas são semelhantes (SomData, DateDiff e PartData) no Access e no TSQL, diferindo na utilização do primeiro argumento.

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

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

    Componente

    Access

    SQL Server

    Ano

    "aaaa"

    ano, aa, aaaa

    Trimestre

    “t”

    trimestre, tt, t

    Mês

    "m"

    mês, mm, m

    Dia do Ano

    "a"

    diadoano, da, a

    Dia

    "d"

    dia, dd, d

    Semana

    “ss”

    sm, ss

    Dia da Semana

    "w"

    dia útil, s

    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, por vezes, utilizam Funções do Access para obter resultados. Ao migrar consultas para o SQL Server, tem de substituir a função Access por uma função TSQL equivalente, se essa função estiver disponível. Se não existir nenhuma função TSQL correspondente, pode, normalmente, criar um coluna computada (o termo utilizado em TSQL para referir uma coluna calculada) para fazer o que pretende. Com o TSQL tem uma vasta gama de funções e ver o que está disponível funcionará em seu benefício. Para obter mais informações, consulte O que são funções de base de dados SQL?.

A tabela seguinte lista quais funções do Access têm uma função correspondente em TSQL.

Categoria do Access

Função do Access

Função do TSQL

Conversão

Função Car

CHAR

Conversão

Função Dia

DAY

Conversão

Função FormatoNúmero

FORMAT

Conversão

Função FormatoPercentagem

FORMAT

Conversão

Função Cad

STR

Conversão

Funções de Conversão de Tipo

CAST and CONVERT

Data/Hora

Função Data

CURRENT_TIMESTAMP

Data/Hora

Função Dia

DATEFROMPARTS

Data/Hora

Função SomData

SOMDATA

Data/Hora

Função DifData

DIFDATA

DATEDIFF_BIG

Data/Hora

Função PartData

DATEPART

Data/Hora

Função DataSerial

DATEFROMPARTS

Data/Hora

Função ValorData

DATENAME

Data/Hora

Função Hora

TIMEFROMPARTS

Data/Hora

Função Minuto

TIMEFROMPARTS

Data/Hora

Função Mês

MONTH

Data/Hora

Função Agora

SYSDATETIME

Data/Hora

Função Segundo

TIMEFROMPARTS

Função Tempo

TIMEFROMPARTS

Data/Hora

Função SerieHora

TIMEFROMPARTS

Data/Hora

Função Dia.Semana

DATEPART

DATENAME

Data/Hora

Função Ano

YEAR

DATEFROMPARTS

Agregação de Domínio

Funções DPrimeiro, DÚltimo

FIRST_VALUE

LAST_VALUE

Matemática

Função Abs

ABS

Matemática

Função Atg

ATAN

ATN2

Matemática

Função Cos

COS

ACOS

Matemática

Função Exp

EXP

Matemática

Funções Int, Corrigir

FLOOR

Matemática

Função Log

LOG

LOG10

Matemática

Função Aleatório

RAND

Matemática

Função Arredondado

ROUND

Matemática

Função Snl

SIGN

Matemática

Função Sen

SIN

Matemática

Função Rqd

SQRT

Fluxo de Programa

Função Escolha

CHOOSE

Fluxo de Programa

Função Ise

IIF

Estatística

Função Média

AVG

Agregar do SQL

Função Contar

COUNT

COUNT_BIG

Agregar do SQL

Funções Mínimo, Máximo

MIN

MAX

Agregar do SQL

Funções 'DesvP', 'DesvPP'

STDEV

STDEVP

Agregar do SQL

Função Soma

SUM

Agregar do SQL

Funções Var, VarP

VAR

VARP

Texto

Função Formatar

FORMAT

Texto

Função Minúscula

LOWER

Texto

Função Esquerda

LEFT

Texto

Função Compr

LEN

Texto

Funções SuprEsq, SuprDir e SuprEspaço

TRIM

LTRIM

RTRIM

Texto

Função Substituir

REPLACE

Texto

Função Direita

RIGHT

Texto

Função StrReverse

REVERSE

Texto

Função Maiúscula

UPPER

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.

As comunidades ajudam-no a colocar e a responder perguntas, a dar feedback e a ouvir especialistas com conhecimentos abrangentes.