Validar conversiones antes de modificar una columna

Una tabla de carga guarda fechas y cantidades como texto. Antes de convertir las columnas o mover los datos a tablas definitivas necesitamos encontrar los valores que no cumplen el formato esperado.

Qué necesitamos distinguir

Convertir significa transformar un valor a otro tipo. El formato ISO yyyy-mm-dd expresa año, mes y día en un orden independiente de la presentación local.

Separaremos un valor ausente de uno presente pero incompatible. En este ejemplo la fecha debe utilizar el formato ISO yyyy-mm-dd y la cantidad debe convertirse a un entero positivo.

Consulta

/*
    Antes de ejecutar:
        Revisa la base activa, los nombres de objetos, los parámetros y los permisos.
        Adapta el ejemplo a tu modelo y pruébalo primero en un ambiente controlado.
*/

SET NOCOUNT ON;
GO
-- Consulta
WITH ValoresPreparados AS
(
    SELECT
        mi.IdMovimientoImportado,
        mi.FechaTexto,
        mi.CantidadTexto,
        NULLIF(TRIM(mi.FechaTexto), N'') AS FechaLimpia,
        NULLIF(TRIM(mi.CantidadTexto), N'') AS CantidadLimpia
    FROM dbo.MovimientoImportado AS mi
),
Conversiones AS
(
    SELECT
        vp.*,
        TRY_CONVERT(DATE, vp.FechaLimpia, 23) AS FechaConvertida,
        TRY_CONVERT(INT, vp.CantidadLimpia) AS CantidadConvertida
    FROM ValoresPreparados AS vp
)
SELECT
    c.IdMovimientoImportado,
    c.FechaTexto,
    c.FechaConvertida,
    c.CantidadTexto,
    c.CantidadConvertida,
    CASE
        WHEN c.FechaLimpia IS NULL THEN N'Fecha ausente'
        WHEN c.FechaConvertida IS NULL THEN N'Fecha incompatible'
        WHEN c.CantidadLimpia IS NULL THEN N'Cantidad ausente'
        WHEN c.CantidadConvertida IS NULL THEN N'Cantidad incompatible'
        WHEN c.CantidadConvertida <= 0 THEN N'Cantidad fuera de regla'
    END AS Motivo
FROM Conversiones AS c
WHERE c.FechaLimpia IS NULL
   OR c.FechaConvertida IS NULL
   OR c.CantidadLimpia IS NULL
   OR c.CantidadConvertida IS NULL
   OR c.CantidadConvertida <= 0
ORDER BY c.IdMovimientoImportado;
GO

Parámetros o permisos

En DECIMAL, la precisión es la cantidad total de dígitos y la escala indica cuántos quedan después del separador decimal.

Cambia el tipo destino y la regla de negocio. El estilo 23 exige una fecha como 2026-09-14; utilizar un estilo explícito evita que DATEFORMAT o el idioma de la sesión interpreten de forma distinta un valor ambiguo. Para números decimales define precisión y escala, por ejemplo DECIMAL(12, 2), y revisa el separador decimal utilizado por la fuente. TRY_CAST es útil cuando no necesitas un estilo; TRY_CONVERT permite indicarlo en conversiones que lo admiten. La consulta solo lee la tabla de carga.

Cómo leer el resultado

La consulta devuelve únicamente filas que necesitan atención. Conservamos el texto original junto al valor convertido para distinguir un problema de formato de una regla funcional, como una cantidad igual a cero. TRY_CONVERT produce NULL cuando una conversión permitida no puede realizarse. Por eso primero transformamos cadenas vacías en NULL y luego conservamos indicadores separados para ausencia e incompatibilidad. Para medir el alcance antes de corregir, agrupa el resultado por Motivo o incorpora las mismas expresiones a una consulta de resumen.

Qué conclusión sí permite obtener

Permite identificar valores que no se convierten bajo tipos y formatos concretos, además de valores convertibles que incumplen una regla explícita.

Qué conclusión todavía no permite obtener

Que una conversión funcione no demuestra que el dato sea correcto. 2026-01-02 es una fecha válida, pero la consulta no sabe si la fuente quiso representar el 1 de febrero. Tampoco confirma que un cambio de tipo sea seguro: índices, restricciones, código SQL y aplicaciones pueden depender de la definición actual.

Siguiente comprobación razonable

Corrige o rechaza las filas identificadas y vuelve a ejecutar la validación. Antes de usar ALTER COLUMN, revisa dependencias, rango, precisión, nulabilidad y una estrategia de despliegue y reversión.

Índice del recorrido

Desarrollo y exploración

22 artículos de Desarrollo y exploración
  1. 01Buscar una tabla o vista por nombre
  2. 02Buscar una columna en toda la base
  3. 03Buscar texto dentro de procedimientos, vistas y funciones
  4. 04Consultar dependencias de un objeto
  5. 05Listar relaciones y llaves foráneas
  6. 06Consultar llaves primarias, restricciones únicas e índices
  7. 07Listar columnas con tipo, longitud, nulabilidad y valor predeterminado
  8. 08Encontrar triggers y sus tablas asociadas
  9. 09Encontrar objetos modificados recientemente
  10. 10Obtener conteos aproximados de todas las tablas
  11. 11Medir el espacio utilizado por cada tabla
  12. 12Revisar columnas IDENTITY y su valor actual
  13. 13Detectar registros duplicados por una clave de negocio
  14. 14Detectar registros huérfanos
  15. 15Comparar dos conjuntos de datos
  16. 16Validar conversiones antes de modificar una columna
  17. 17Ejecutar un UPDATE con validación y reversión controlada
  18. 18Ejecutar un DELETE con respaldo lógico y reversión controlada
  19. 19Comparar la estructura de dos bases de datos
  20. 20Describir el resultado de una consulta o procedimiento
  21. 21Encontrar tablas sin llave primaria
  22. 22Buscar un valor en columnas seleccionadas