Compartir a través de


Limitaciones de la depuración de Transact-SQL

Este tema se aplica a:

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional

Visual Studio Express

kkyhd4yb.DoesApplybmp(es-es,VS.100).gif kkyhd4yb.DoesApplybmp(es-es,VS.100).gif kkyhd4yb.DoesApplybmp(es-es,VS.100).gif kkyhd4yb.DoesNotApplybmp(es-es,VS.100).gif

Existen varias limitaciones generales que se deben tener en cuenta a la hora de depurar Transact-SQL con el depurador de Visual Studio y SQL Server, a partir de SQL Server 2005. Para obtener más información sobre cómo depurar Transact-SQL con SQL Server Management Studio, vea Utilizar el depurador de Transact-SQL.

Depuración de varios niveles de SQL

  • Cuando se depuran aplicaciones de varios niveles, no se puede usar Paso a paso por instrucciones para ir desde el código correspondiente al nivel de aplicación (C#, Visual Basic o C++) al código correspondiente a la instancia de SQL Server (Transact-SQL o SQL/CLR).En su lugar, debe establecer un punto de interrupción en el código del procedimiento almacenado y presionar Continuar (F5) para ejecutar el código hasta el punto de interrupción.También puede usar Ejecutar hasta el cursor para alcanzar un punto deseado, sin necesidad de usar un punto de interrupción.Observe que dentro del nivel de SQL Server, puede retroceder y avanzar entre Transact-SQL y el código de SQL/CLR.

  • Tampoco puede desplazarse en el sentido contrario, desde el código del procedimiento almacenado al código del nivel que llamó a dicho procedimiento almacenado.Si desea continuar con la depuración después de volver al nivel de aplicación, establezca un punto de interrupción en el código de la aplicación a partir del punto desde el que se llamó al procedimiento almacenado.

  • La agrupación de conexiones es una técnica que mejora el rendimiento.Cuando una aplicación cierra su conexión de datos, una conexión de SQL Server no se cierra completamente, sino que permanece en un grupo para que pueda volver a utilizarse si la aplicación intenta abrir la conexión posteriormente.Sin embargo, cuando una conexión se restablece a través de la agrupación de conexiones, la depuración de Transact-SQL no se vuelve a habilitar.

    Conviene que deshabilite la agrupación de conexiones temporalmente mientras realiza la depuración.Para ello, establezca "Pooling=false" en la cadena de conexión usada para conectar a la instancia de SQL Server.Cuando finalice la depuración, quite este atributo de la cadena de conexión y la agrupación se habilitará de forma predeterminada.

  • Si una aplicación administrada conecta con un origen de datos de SQL Server mediante el proveedor de datos .NET Framework para SQL Server, el rendimiento será mayor que si lo hace mediante OLE DB u ODBC.Puede llevar a cabo la depuración administrada y la depuración de Transact-SQL en la misma sesión del depurador.

    Si una aplicación administrada se está ejecutando y realiza una asociación a la aplicación con el depurador, tendrá la oportunidad de elegir el tipo de depuración.Si desea llevar la cabo la depuración de Transact-SQL, deberá elegir la depuración de Transact-SQL, y si desea depurar código de SQL/CLR, deberá especificar además la depuración administrada.

  • Puede realizar la depuración de Transact-SQL después de llevar a cabo la asociación a una aplicación en ejecución.Tenga en cuenta, sin embargo, que solo se pueden depurar las conexiones de bases de datos que se crean después de haber completado la asociación.Así, si una aplicación llama a un procedimiento almacenado y el proceso dura mucho tiempo, no podrá realizar la asociación a la conexión que hizo la llamada; solo podrá realizar la asociación a las conexiones nuevas que llamen al procedimiento almacenado después de que se haya establecido conexión con la aplicación.

  • Si está depurando a través de una conexión realizada con OleDbDataAdapter y espera mucho tiempo después de haber alcanzado un punto de interrupción, se agotará el tiempo de espera de la conexión.Si intentar continuar con la depuración una vez transcurrido el tiempo de espera (elige Continuar en el menú Depurar, por ejemplo), el depurador se cerrará (en lugar de seguir ejecutándose).Este comportamiento es el esperado.El depurador se cierra porque OleDbDataAdapter, a diferencia de SqlDataAdapter, no inicia una excepción cuando se agota el tiempo de espera.Para evitar este problema, establezca el valor del tiempo de espera en un número alto cuando use OleDbDataAdapter.

    Para obtener más información sobre cómo establecer el valor del tiempo de espera para los proveedores de datos .NET Framework, vea Propiedad OleDbCommand.CommandTimeout y Propiedad SqlCommand.CommandTimeout en la documentación de la Biblioteca de clases de .NET Framework.

Otras limitaciones

  • Para poder ser depurados, los desencadenadores se deben activar: no puede depurar los desencadenadores directamente.En su lugar, inicie la depuración en un procedimiento almacenado que provoque la activación del desencadenador.

  • En depuración en tiempo de ejecución, una serie de subselecciones (por ejemplo, en una unión) pueden llenar el búfer de red.Esto puede hacer que el código que habitualmente se ejecuta correctamente se pare durante la depuración.Para obtener más datos, use RecordSet.MoveNext y RecordSet.NextRecordSet.

  • Si el nombre de un procedimiento almacenado contiene comillas, puede obtener un mensaje de error del depurador.Para obtener más información, vea Error durante la depuración de procedimientos cuyos nombres contienen comillas.

  • Los valores almacenados en caché no se modifican automáticamente.No puede esperar que los cambios que se producen en los valores locales o en los parámetros que el intérprete de Transact-SQL almacena en caché siempre entren en vigor durante el intervalo de tiempo empleado en recorrer una instrucción Transact-SQL.Aunque puede haber modificado el valor, es probable que no se vuelva a comprobar.No puede forzar una actualización de los valores almacenados en caché.Los valores almacenados en caché existen porque el plan de ejecución de SQL Server determina que los valores para algunas variables no se cargarán dinámicamente para cada ejecución o referencia de instrucción.Para obtener más información, busque "SHOWPLAN" en la documentación de SQL Server.

  • No puede realizar la asociación al proceso nativo de SQL Server a la vez que depura un procedimiento almacenado.

Vea también

Conceptos

Depurar Transact-SQL

Limitaciones de características y comandos del depurador

Otros recursos

Debugger Security