Comparar Access SQL con SQL Server TSQL

Se aplica a
Access para Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Si migra los datos de Access a SQL Server o crea una solución de Access con SQL Server como base de datos back-end, es fundamental que conozca 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 obtener más información, vea Access SQL: conceptos básicos, vocabulario y sintaxis y Referencia de Transact-SQLTransact-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, use 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 hay un valor verdadero WHERE Bitvalue <> 0

Valores nulos

Un valor nulo no es un campo vacío que significa "ningún valor en absoluto". Un valor nulo es un marcador de posición que significa que faltan datos o que estos son desconocidos. Los sistemas de base de datos que reconocen valores nulos implementan "lógica de tres valores", lo que significa que algo puede ser verdadero, falso o desconocido. Si no controla correctamente los valores nulos, puede 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 comparaciones directas de igualdad con NULL mediante = y <> los operadores. 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. No hay ningún sustituto para realizar pruebas exhaustivas y confirmar los resultados.

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, se usan principalmente las funciones CAST y CONVERT TSQL, aunque hay otras funciones de conversión para necesidades especializadas. 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 intervalo y es una expresión de cadena que requiere comillas.

  • En SQL Server, el primer argumento se denomina parcfecha y usa valores de palabra clave que no requieren 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 (el término TSQL usado para una columna calculada) para hacer lo que desee. TSQL tiene una amplia variedad de funciones y le será de ayuda ver 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 CARÁCTER
Conversión Función Día DAY
Conversión FormatoNúmero FORMATO
Conversión Función FormatoPorcentaje FORMATO
Conversión Función Cad STR
Conversión Funciones de conversión de tipo CAST y CONVERT
Fecha/hora Función fecha CURRENT_TIMESTAMP
Fecha/hora Función Día DATEFROMPARTS
Fecha/hora Función AgregFecha AGREGFEFE
Fecha/hora Función DifFecha DATEDIFF
DATEDIFF_BIG
Fecha/hora Función ParcFecha PARCFECHA
Fecha/hora Función SerieFecha DATEFROMPARTS
Fecha/hora Función ValorFecha NOMBREDE DATENAME
Fecha/hora Función Hora TIMEFROMPARTS
Fecha/hora Función minuto TIMEFROMPARTS
Fecha/hora Función mes MONTH
Fecha/hora Función Ahora SYSDATETIME
Fecha/hora Función Segundo TIMEFROMPARTS
Función Hora TIMEFROMPARTS
Fecha/hora Función SerieHora TIMEFROMPARTS
Fecha/hora Función DíaSemana PARCFECHA
NOMBREDE DATENAME
Fecha/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 MULTIPLO.INFERIOR
Matemáticas Función Ln LOG
LOG10
Matemáticas Función NúmAleat RAND
Matemáticas Función redondear REDONDEAR
Matemáticas Función Signo SIGNO
Matemáticas Función Sen SEN
Matemáticas Función Raíz2 RAIZ
Flujo de programa Función Elegir ELEGIR
Flujo de programa Función Silnm IIF
Estadística Función Prom AVG
Agregado SQL Función Contar CONTAR
COUNT_BIG
Agregado SQL Funciones Mín y Máx MIN
MAX
Agregado SQL Funciones DesvEst y DesvEstP DESVEST
DESVESTP
Agregado SQL Función Suma SUMA
Agregado SQL Funciones Var y VarP VAR
VARP
Texto Función formato FORMATO
Texto Función Minús LOWER
Texto Función Izq IZQUIERDA
Texto Función Len LARGO
Texto Funciones RecortarIzq, RecortarDer y Recortar TRIM
LTRIM
RTRIM
Texto Función Reemplazar REEMPLAZAR
Texto Función Derecha DERECHA
Texto Función StrReverse MARCHA ATRÁS
Texto Función Mayús UPPER