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 |
||
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 |
||
Agregação de Domínio |
||
Matemática |
||
Matemática |
||
Matemática |
||
Matemática |
||
Matemática |
||
Matemática |
||
Matemática |
||
Matemática |
||
Matemática |
||
Matemática |
||
Matemática |
||
Fluxo de Programa |
||
Fluxo de Programa |
||
Estatística |
||
Agregar do SQL |
||
Agregar do SQL |
||
Agregar do SQL |
||
Agregar do SQL |
||
Agregar do SQL |
||
Texto |
||
Texto |
||
Texto |
||
Texto |
||
Texto |
||
Texto |
||
Texto |
||
Texto |
||
Texto |