Comparar Access SQL con SQL Server TSQL
Applies ToAccess para Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

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

Función Car

CHAR

Conversión

Función Día

DAY

Conversión

FormatoNúmero

FORMAT

Conversión

Función FormatoPorcentaje

FORMAT

Conversión

Función Cad

STR

Conversión

Funciones de conversión de tipo

CAST y CONVERT

Fecha y hora

Función fecha

CURRENT_TIMESTAMP

Fecha y hora

Función Día

DATEFROMPARTS

Fecha y hora

Función AgregFecha

DATEADD

Fecha y hora

Función DifFecha

DATEDIFF

DATEDIFF_BIG

Fecha y hora

Función ParcFecha

DATEPART

Fecha y hora

Función SerieFecha

DATEFROMPARTS

Fecha y hora

Función ValorFecha

DATENAME

Fecha y hora

Función Hora

TIMEFROMPARTS

Fecha y hora

Función minuto

TIMEFROMPARTS

Fecha y hora

Función mes

MONTH

Fecha y hora

Función Ahora

SYSDATETIME

Fecha y hora

Función Segundo

TIMEFROMPARTS

Función Tiempo

TIMEFROMPARTS

Fecha y hora

Función SerieHora

TIMEFROMPARTS

Fecha y hora

Función DíaSemana

DATEPART

DATENAME

Fecha y hora

Función Año

YEAR

DATEFROMPARTS

Agregado de dominio

Funciones DPrim y DÚltimo

FIRST_VALUE

LAST_VALUE

Matemáticas

Función Abs

ABS

Matemáticas

Función ArcTg

ATAN

ATN2

Matemáticas

Función Cos

COS

ACOS

Matemáticas

Función EXP

EXP

Matemáticas

Funciones Ent y SinDec

FLOOR

Matemáticas

Función Ln

LOG

LOG10

Matemáticas

Función NúmAleat

RAND

Matemáticas

Función redondear

ROUND

Matemáticas

Función Signo

SIGN

Matemáticas

Función Sen

SIN

Matemáticas

Función Raíz2

SQRT

Flujo de programa

Función Elegir

CHOOSE

Flujo de programa

Función Silnm

IIF

Estadística

Función Prom

AVG

Agregado SQL

Función Contar

COUNT

COUNT_BIG

Agregado SQL

Funciones Mín y Máx

MIN

MAX

Agregado SQL

Funciones DesvEst y DesvEstP

STDEV

STDEVP

Agregado SQL

Función Suma

SUM

Agregado SQL

Funciones Var y VarP

VAR

VARP

Texto

Función formato

FORMAT

Texto

Función Minús

LOWER

Texto

Función Izq

LEFT

Texto

Función Len

LEN

Texto

Funciones RecortarIzq, RecortarDer y Recortar

TRIM

LTRIM

RTRIM

Texto

Función Reemplazar

REPLACE

Texto

Función Derecha

RIGHT

Texto

Función StrReverse

REVERSE

Texto

Función Mayús

UPPER

¿Necesita más ayuda?

¿Quiere más opciones?

Explore las ventajas de las suscripciones, examine los cursos de aprendizaje, aprenda a proteger su dispositivo y mucho más.

Las comunidades le ayudan a formular y responder preguntas, enviar comentarios y leer a expertos con conocimientos extensos.