Un colaborador de The Daily WTF, John F., relata una migración que falló de forma sutil. Su empresa había vendido parte del negocio y debía entregar documentos de clientes y sus metadatos, almacenados en un SharePoint local. El plan: extraer los metadatos a una base de datos SQL Server.
Un colega había empezado con la herramienta ETL de Microsoft, SSIS, que generó el esquema de la base de datos. John cambió a PowerShell para tener más control y usó System.Data.SqlClient.SqlBulkCopy por velocidad, lo que obligaba a declarar tipos de datos .NET exactos en su script.
Uno de los campos era el número de cliente: hasta diez dígitos, a menudo con dos ceros iniciales. Alguien lo había guardado tiempo atrás en un campo Number de SharePoint, que internamente es un Double. La doble precisión representa con exactitud números de diez dígitos, así que hasta ahí sin problema. La trampa estaba en el nombre. En SQL Server el tipo de doble precisión se llama float; para precisión simple hay que escribir float(24). John no lo sabía y mapeó la columna float al tipo float de .NET, es decir, precisión simple.
Los doubles que salían de SharePoint se truncaban silenciosamente al insertarse. La mayoría de los registros sobrevivieron, pero a los números de cliente grandes se les alteraron los últimos dígitos. Los testers no se dieron cuenta. La carga completa sí. El equipo tuvo que generar una lista de los números modificados y corregir los datos a posteriori. La moraleja: de plataforma Microsoft a plataforma Microsoft con herramientas Microsoft, y aun así los nombres de los tipos le jugaron la mala pasada.
Comentarios
Aún no hay comentarios — escribe el primero.
Inicia la conversación
Sin cuenta ni contraseña — introduce tu correo y te enviamos un enlace de acceso de un solo uso. ¿Primera vez? Todo se configura automáticamente.
Tu valoración se aplicará automáticamente al iniciar sesión.
Revisa tu bandeja de entrada
Hemos enviado un enlace de acceso a …. Ábrelo en este dispositivo — esta pestaña te conectará automáticamente.
¿No llega nada? Mira en la carpeta de spam — y marca el correo como «No es spam» para que la próxima vez llegue directo.