Comparando o Access SQL com o SQL Server TSQL

Aplica-se a
Access para Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Se você migrar seus dados do Access para SQL Server ou criar uma solução access com SQL Server como banco de dados de back-end, é vital que você saiba 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 Acesso SQL: conceitos básicos, vocabulário e sintaxe e Referência 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
Na exibição SQL, use a Declaração de Parâmetros SQL
@ParamName

Observações

  • 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:

    • Testar o valor falso WHERE Bitvalue = 0
    • Testar o 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. Sistemas de banco 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 você não lidar corretamente com valores nulos, poderá obter resultados incorretos ao fazer comparações de igualdade ou avaliar 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.
  • Em SQL Server você pode usar a opção SET ANSI_NULLS OFF para comparações diretas de igualdade com 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".

Em SQL Server, você usa principalmente as funções CAST e CONVERT TSQL, 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 requer aspas.

  • Em SQL Server, o primeiro argumento é chamado de datepart e usa palavra-chave valores 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, geralmente você poderá criar uma coluna computada (o termo TSQL usado para uma coluna calculada) para fazer o que quiser. O TSQL tem uma ampla matriz de funções e é para seu benefício ver o que está disponível. Para obter 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 SEN
Matemática Função Sqr RAIZ
Fluxo do Programa Função Choose ESCOLHER
Fluxo do Programa Função IIf IIF
Estatística Função Avg AVG
Agregado SQL Função Count CONT.NÚM
COUNT_BIG
Agregado SQL Funções Min, Max MÍN
MÁX
Agregado SQL Funções StDev, StDevP DESVPAD
DESVPADP
Agregado SQL Função Soma SOMA
Agregado SQL Funções Var, VarP VAR
VARP
Texto Função Format FORMATO
Texto Função LCase LOWER
Texto Função Left DEIXOU
Texto Função Len NÚM.CARACT
Texto Funções LTrim, RTrim e Trim TRIM
LTRIM
RTRIM
Texto Função Replace SUBSTITUIR
Texto Função Right CERTO
Texto Função StrReverse REVERTER
Texto Função UCase UPPER