Pregunta

Estoy a punto de heredar un conjunto grande y complejo de procedimientos almacenados que procesan mensualmente conjuntos de datos muy grandes.

Estamos en el proceso de depurarlos para que coincidan con el proceso original escrito en VB6.La razón por la que decidieron reescribirlos en t-sql es porque el proceso vb lleva días y este nuevo proceso lleva horas.

Todo esto está bien, pero ¿cómo puedo hacer que estos ahora enormes fragmentos de código t-sql (más de 1,5k líneas) sean incluso legibles/mantenibles de forma remota?

Cualquier experiencia que haga que t-sql no cause mucho dolor de cabeza es bienvenida.

¿Fue útil?

Solución

Primero, cree un directorio lleno de archivos .sql y manténgalos allí.Agregue este conjunto de archivos .sql a un sistema de control de revisiones.SVN funciona bien.Tenga una herramienta que los cargue en su base de datos, sobrescribiendo los existentes.

Tenga una base de datos de prueba e informes de referencia que muestren cómo debería ser el resultado del procesamiento mensual.Sus pruebas también deben estar en forma de archivos .sql bajo control de versiones.

Ahora puede refactorizar sus procesos tanto como desee y luego ejecutar sus pruebas para confirmar el funcionamiento correcto.

Otros consejos

Para formatear/SQL bonito, he tenido éxito con http://www.sqlinform.com/ - Versión gratuita en línea que puedes probar y también disponible una versión de escritorio.

SQLinForm es un formateador automático de código SQL para todas las bases de datos principales (ORACLE, SQL Server, DB2/UDB, Sybase, Informix, PostgreSQL, MySQL, etc.) con muchas opciones de formato.

Definitivamente comience reformateando el código, especialmente las sangrías.

Luego modularice el SQL.Extraiga fragmentos en procedimientos y funciones más pequeños con nombres descriptivos en sus propios archivos independientes.Creo que esto por sí solo funciona muy bien para mejorar mi comprensión de archivos SQL grandes.

ApexSQLScript es una gran herramienta para crear secuencias de comandos de una base de datos completa; luego puede verificarla en el control de código fuente y administrar los cambios.

También descubrí que documentar los sprocs de manera consistente le permite extraer información sobre ellos usando los datos sobre el código fuente en sys.sql_modules; puede usar etiquetas o lo que sea para ayudar a documentar los subsistemas.

Además, utilice esquemas (o incluso varias bases de datos); esto realmente ayudará a dividir su base de datos en unidades lógicas y señalará problemas arquitectónicos.

En cuanto a código grande, recientemente descubrí que la función CTE de SQL2005 es muy útil para administrar código con muchas consultas anidadas (ni siquiera recursivas).En lugar de gestionar un montón de anidamientos y sangrías, los CTE se pueden declarar, crear y luego utilizar en la declaración final.Esto también ayuda a la refactorización, ya que parece mucho más fácil eliminar consultas y columnas anidadas redundantes.

Los procesos almacenados y las UDF son vitales para administrar una base de código grande y eliminar los rincones oscuros.No he encontrado que las vistas sean muy útiles porque no son parametrizables (las UDF se pueden usar en estos casos si los conjuntos de resultados son pequeños).

Intente modularizar el SQL tanto como sea posible y tenga un conjunto de pruebas que le permitan mantener, refactorizar y agregar funciones cuando sea necesario.Una vez tuve el placer de heredar un Stored Proc que sumaba 5000 líneas y todavía tengo pesadillas al respecto.Una vez que terminó el proyecto, imprimí el proceso almacenado para reírme y destruir árboles X en el proceso.Durante una de las sesiones semanales de stand up de nuestra empresa, lo coloqué de punta a punta y se extendió a lo largo de todo el edificio.Presenté esto como un ejemplo de cómo no escribir ni mantener procedimientos almacenados.

Una cosa que puede hacer es tener un script automatizado para almacenar todos los cambios en el control de fuente para que pueda revisar los cambios en los procedimientos (usando una diferencia en las versiones anterior y actual).

Definitivamente no es gratis, pero para mantener su T-SQL formateado de manera consistente, Redgate Software Mensaje SQL es muy útil.Siempre que la sintaxis de tu proceso sea correcta, un par de pulsaciones de teclas (Ctrl+K,Y) lo reformateará todo instantáneamente.Las opciones le brindan mucho control sobre cómo se formatea su SQL.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top