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 |
||
Conversão |
||
Conversão |
||
Conversão |
||
Conversão |
||
Conversão |
||
Data/Hora |
||
Data/Hora |
||
Data/Hora |
||
Data/Hora |
||
Data/Hora |
||
Data/Hora |
||
Data/Hora |
||
Data/Hora |
||
Data/Hora |
||
Data/Hora |
||
Data/Hora |
||
Data/Hora |
||
Data/Hora |
||
Data/Hora |
||
Data/Hora |
||
Domínio Agregado |
||
Matemática |
||
Matemática |
||
Matemática |
||
Matemática |
||
Matemática |
||
Matemática |
||
Matemática |
||
Matemática |
||
Matemática |
||
Matemática |
||
Matemática |
||
Fluxo do Programa |
||
Fluxo do Programa |
||
Estatística |
||
Agregado SQL |
||
Agregado SQL |
||
Agregado SQL |
||
Agregado SQL |
||
Agregado SQL |
||
Texto |
||
Texto |
||
Texto |
||
Texto |
||
Texto |
||
Texto |
||
Texto |
||
Texto |
||
Texto |