Para tareas como migrar los datos de Access a SQL Server o crear una solución de Access con SQL Server como base de datos back-end es fundamental conocer las diferencias entre Access SQL y SQL Server Transact SQL (TSQL). Las siguientes son algunas de las principales variaciones que necesita conocer para que su solución funcione según lo esperado.
Para más información, vea los artículos Access SQL: conceptos básicos, vocabulario y sintaxis y Referencia de Transact-SQL.
Diferencias de sintaxis y expresión
Hay algunas diferencias sintácticas y de expresión que requieren conversión. En la tabla siguiente se resumen los más comunes.
Diferencia |
Access SQL |
SQL Server TSQL |
Atributo de base de datos relacional |
Generalmente denominado campo |
Generalmente denominado columna |
Literales de cadena |
Comillas inglesas ("), como "Alberto Hermosilla" |
Comillas simples ('), como 'Alberto Hermosilla' |
Literales de fecha |
Signo de almohadilla (#), como #1/1/2019 # |
Comillas simples ('), como '1/1/2019' |
Múltiples caracteres comodín. |
Asterisco (*), como *Cath* |
Porcentaje (%), como "Cath%" |
Carácter comodín único. |
Signo de interrogación (?), como "cath?" |
Carácter de subrayado (_), como "Cath_" |
Operador de módulo |
Operador MOD, como valor1 MOD Valor2 |
Porcentaje (%), como Valor1 % Valor2 |
Valores booleanos |
WHERE Bitvalue = [True | False] O bien WHERE Bitvalue = [-1 | 0] |
WHERE Bitvalue = [1 | 0] |
Parámetros |
[< Un nombre que no es una columna definida >] O bien En la vista SQL utilice la declaración de parámetros SQL |
@ParamName |
Notas
-
Access usa comillas inglesas (") en torno a los nombres de tabla y objetos. T-SQL puede usarlos para nombres de tabla con espacios en blanco, pero no es un procedimiento de nomenclatura estándar. En la mayoría de los casos, se deben renombrar los nombres de objetos sin dejar espacios en blanco, pero las consultas también deben volver a escribirse para que reflejen los nombres de tabla nuevos. Se usan corchetes [] para las tablas a las que no se puede cambiar el nombre, pero que no cumplen los estándares de nomenclatura. Access también agrega paréntesis en torno a los parámetros de las consultas, pero pueden quitarse en T-SQL.
-
Considere la posibilidad de usar el formato de fecha canónico, aaaa-mm-dd hh:mm:ss, que es un estándar de ODBC para las fechas almacenadas como caracteres y ofrece una manera coherente de representarlas en las bases de datos conservando el orden por fechas.
-
Para evitar confusiones cuando compare valores booleanos, puede usar la siguiente comparación para Access y SQL Server:
-
Comprobar si el valor es falso WHERE Bitvalue = 0
-
Comprobar si el valor es verdadero WHERE Bitvalue <> 0
-
Valores nulos
Un valor nulo no es un campo vacío. No significa "ningún valor". Un valor nulo es un marcador de posición que significa que faltan datos o que estos son desconocidos. Los sistemas de bases de datos que reconocen valores nulos implementan la "lógica de los tres valores", que significa que algo solo puede ser verdadero, falso o desconocido. Si no trabajas correctamente con valores nulos, puedes obtener resultados incorrectos al realizar comparaciones de igualdad o evaluar cláusulas WHERE. Aquí se muestra una comparación de cómo Access y SQL Server tratan los valores nulos.
Deshabilitar valores nulos en una tabla
en Access y en SQL Server, los valores nulos están habilitados por defecto. Para deshabilitar los valores nulos en la columna de una tabla, haga lo siguiente:
-
En Access, establezca la propiedad Requerido de un campo como Sí.
-
En SQL Server, agregue el atributo NOT NULL a una columna en una instrucción CREATE TABLE.
Compruebe si hay valores nulos en una cláusula WHERE
Use los predicados de comparación IS NULL y IS NOT NULL:
-
En Access, use IS NULL o IS NOT NULL. Por ejemplo:
SELECT … WHERE column IS NULL.
-
En SQL Server, use IS NULL o IS NOT NULL. Por ejemplo:
SELECT … WHERE field IS NULL
Convertir valores NULL con funciones
Use las funciones de nulos para proteger las expresiones y devolver valores alternativos:
-
En Access, utilice la función NZ (valor, [valorsiesnull]) que devuelve 0 u otro valor. Por ejemplo:
SELECT AVG (NZ (Weight, 50) ) FROM Product
-
En SQL Server, utilice la función ISNULL (valor, valor_para_sustituir) que devuelve 0 u otro valor. Por ejemplo:
SELECT AVG (ISNULL (Weight, 50)) FROM Product
Entender las opciones de la base de datos
Algunos sistemas de bases de datos poseen mecanismos de propiedad:
-
En Access, no hay ninguna opción de base de datos que pertenezca a NULL.
-
En SQL Server puede usar la opción SET ANSI_NULLS OFF para las comparaciones de igualdad directa con NULL mediante los operadores = y < >. Le recomendamos que evite usar esta opción, ya que está obsoleta y puede confundir a otras personas acostumbradas a un tratamiento de nulos que cumpla con ISO.
Conversión y difusión
Siempre que se trabaja con datos o en programación, existe la necesidad de convertir un tipo de datos en otro. El proceso de conversión puede ser simple o complejo. Las cuestiones comunes que necesita considerar son: conversiones implícitas o explícitas, la configuración regional de fecha y hora actuales, el redondeo o el truncamiento de números y los tamaños de los tipos de datos. Probar y validar los resultados minuciosamente sigue siendo la mejor opción.
En Access, se usan las funciones de conversión de tipos. Existen 11 en total, una para cada tipo de datos. Todas empiezan por la letra C. Por ejemplo, para convertir un número de punto flotante en una cadena:
CStr(437.324) returns the string "437.324".
En SQL Server, principalmente se usan las funciones TSQLCAST y CONVERT aunque hay otras hay otras funciones de conversión para necesidades específicas. Por ejemplo, para convertir un número de punto flotante en una cadena:
CONVERT(TEXT, 437.324) returns the string "437.324"
Funciones DateAdd, DateDiff y DatePart
Estas funciones de fecha de uso común (DateAdd, DateDiff y DatePart) son similares en Access y TSQL, pero el uso del primer argumento es distinto.
-
En Access, el primer argumento se denomina interval y es una expresión de cadena que necesita comillas.
-
En SQL Server, el primer argumento se denomina dateparty usa valores de palabras clave que no necesitan comillas.
Componente
Access
SQL Server
Año
«aaaa»
year, yy, yyyy
Trimestre
«t»
quarter, qq, q
Mes
"m"
month, mm, m
Día del año
"a"
dayofyear, dy, y
Día
"d"
day, dd, d
Semana
«ee»
wk, ww
Día de la semana
«e»
weekday, dw
Hora
"h"
hour, hh
Minuto
"n"
minute, mi, n
Segundo
"s"
second, ss, s
Milisegundo
millisecond, ms
Comparación de funciones
Las consultas de Access pueden contener columnas calculadas que en ocasiones usan funciones de Access para obtener resultados. Al migrar consultas a SQL Server, debe reemplazar la función Access con una función TSQL equivalente, si hubiera una disponible. Si no hay ninguna función TSQL correspondiente, normalmente puede crear una columna calculada (este es el término de TSQL que se usa para ello) y realizar lo que desee. TSQL tiene una amplia variedad de funciones y le será de ayuda ver todo lo que está disponible. Para obtener más información, vea ¿Qué son las funciones de base de datos SQL?.
La tabla siguiente muestra qué función de Access tiene una función TSQL correspondiente.
Categoría de Access |
Función de Access |
Función de TSQL |
Conversión |
||
Conversión |
||
Conversión |
||
Conversión |
||
Conversión |
||
Conversión |
||
Fecha y hora |
||
Fecha y hora |
||
Fecha y hora |
||
Fecha y hora |
||
Fecha y hora |
||
Fecha y hora |
||
Fecha y hora |
||
Fecha y hora |
||
Fecha y hora |
||
Fecha y hora |
||
Fecha y hora |
||
Fecha y hora |
||
Fecha y hora |
||
Fecha y hora |
||
Fecha y hora |
||
Agregado de dominio |
||
Matemáticas |
||
Matemáticas |
||
Matemáticas |
||
Matemáticas |
||
Matemáticas |
||
Matemáticas |
||
Matemáticas |
||
Matemáticas |
||
Matemáticas |
||
Matemáticas |
||
Matemáticas |
||
Flujo de programa |
||
Flujo de programa |
||
Estadística |
||
Agregado SQL |
||
Agregado SQL |
||
Agregado SQL |
||
Agregado SQL |
||
Agregado SQL |
||
Texto |
||
Texto |
||
Texto |
||
Texto |
||
Texto |
||
Texto |
||
Texto |
||
Texto |
||
Texto |