sql >> Base de Datos >  >> RDS >> Sqlserver

Depuración de sql dinámico largo en SQL Server 2008

Cuando nos vemos obligados a usar sql dinámico en un proceso almacenado, hacemos lo siguiente. agregue una variable de entrada de depuración que es un campo de bits. Si es 0, la declaración ejecutiva se procesará; si es 1, obtendrá una declaración de impresión en su lugar. Le sugiero que haga algo similar para depurar. En lugar de ejecutar, imprima los resultados de su SQL o posiblemente inserte el SQl en una tabla, ya que parece estar sucediendo en un bucle. Luego puede revisar el sql que se creó y ver dónde salió mal.

Declare debug bit
set debug = 1

...
if debug = 1 Begin     Print @SQL End
Else 
Begin Exec (@sql) End

Alternativamente

Cree una tabla llamada mydynamiccode_logging (con una columna sql de la misma longitud que la declaración max sql, una columna rundate y cualquier otra columna que pueda encontrar necesaria (consideraría las variables de entrada utilizadas para formar la declaración sql, el usuario, la aplicación si más de uno usa este código)

Antes de ejecutar la declaración ejecutiva, ejecute algo como esto:

insert mydynamiccode_logging (sql, rundate)
values (@sql, getdate()) 

Ahora también puede agregar el campo de bits de depuración y solo iniciar sesión cuando lo haya cambiado al modo de depuración o siempre puede iniciar sesión, depende del sistema y cuánto tiempo adicional lleva hacerlo y qué tan bloqueado está el resto del sistema. No desea ralentizar significativamente la producción al iniciar sesión.