Compartir a través de


Depuración de objetos de base de datos CLR

SQL Server proporciona compatibilidad con la depuración de objetos Transact-SQL y Common Language Runtime (CLR) en la base de datos. Los aspectos clave de la depuración en SQL Server son la facilidad de instalación y uso, y la integración del depurador de SQL Server con el depurador de Microsoft Visual Studio. Además, la depuración funciona en todos los lenguajes. Los usuarios pueden entrar sin problemas en objetos CLR desde Transact-SQL y viceversa. El depurador de Transact-SQL en SQL Server Management Studio no se puede usar para depurar objetos de base de datos administrados, pero puede depurar los objetos mediante los depuradores de Visual Studio. La depuración de objetos de base de datos administrados en Visual Studio admite todas las características comunes de depuración, como instrucciones "paso a paso a paso" y "paso a paso por instrucciones" dentro de las rutinas que se ejecutan en el servidor. Los depuradores pueden establecer puntos de interrupción, inspeccionar la pila de llamadas, inspeccionar variables y modificar valores de variable durante la depuración. Tenga en cuenta que Visual Studio .NET 2003 no se puede usar para la programación o depuración de integración clR. SQL Server incluye .NET Framework preinstalado y Visual Studio .NET 2003 no puede usar los ensamblados de .NET Framework 2.0.

Para obtener más información sobre la depuración de código administrado mediante Visual Studio, vea el tema "Depuración de código administrado" en la documentación de Visual Studio.

Permisos y restricciones de depuración

La depuración es una operación con privilegios elevados y, por tanto, solo los miembros del rol fijo de servidor sysadmin pueden hacerlo en SQL Server.

Se aplican las restricciones siguientes durante la depuración:

  • La depuración de rutinas CLR está restringida a una instancia del depurador a la vez. Esta limitación se aplica porque toda la ejecución de código CLR se bloquea cuando se alcanza un punto de interrupción y la ejecución no continúa hasta que el depurador avanza desde el punto de interrupción. Sin embargo, puede continuar depurando Transact-SQL en otras conexiones. Aunque Transact-SQL depuración no inmoviliza otras ejecuciones en el servidor, podría provocar que otras conexiones esperen manteniendo un bloqueo.

  • No se pueden depurar las conexiones existentes, solo se pueden depurar nuevas conexiones, ya que SQL Server requiere información sobre el entorno de cliente y depurador antes de que se pueda realizar la conexión.

Debido a las restricciones anteriores, se recomienda depurar Transact-SQL y código CLR en un servidor de prueba y no en un servidor de producción.

Información general sobre la depuración de objetos de base de datos administrados

La depuración en SQL Server sigue un modelo por conexión. Un depurador solo puede detectar y depurar actividades a la conexión de cliente a la que está asociada. Dado que la funcionalidad del depurador no está limitada por el tipo de conexión, se pueden depurar tanto el flujo de datos tabulares (TDS) como las conexiones HTTP. Sin embargo, SQL Server no permite depurar conexiones existentes. La depuración admite todas las características comunes de depuración dentro de rutinas que se ejecutan en el servidor. La interacción entre un depurador y SQL Server se produce a través del modelo de objetos de componente distribuido (COM).

Para obtener más información y escenarios sobre la depuración de procedimientos almacenados administrados, funciones, desencadenadores, tipos definidos por el usuario y agregados, vea el tema "Depuración de bases de datos de integración de CLR de SQL Server" en la documentación de Visual Studio.

El protocolo de red TCP/IP debe estar habilitado en la instancia de SQL Server para poder usar Visual Studio para el desarrollo remoto, la depuración y el desarrollo. Para obtener más información sobre cómo habilitar el protocolo TCP/IP en el servidor, vea Configurar protocolos de cliente.

Para depurar un objeto de base de datos administrado

  1. Abra Microsoft Visual Studio, cree un nuevo proyecto de SQL Server y establezca una conexión a una base de datos en una instancia de SQL Server.

  2. Cree un nuevo tipo. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto, seleccione Agregar y Nuevo elemento... En la ventana Agregar nuevo elemento , seleccione Procedimiento almacenado, User-Defined Función, User-Defined Tipo, Desencadenador, Agregado o Clase. Especifique un nombre para el archivo de origen del nuevo tipo y haga clic en Agregar.

  3. Agregue código para el nuevo tipo al editor de texto. Para obtener código de ejemplo para obtener un procedimiento almacenado de ejemplo, consulte la sección más adelante en este tema.

  4. Agregue un script que pruebe el tipo. En el Explorador de soluciones, expanda el directorio TestScripts haciendo doble clic en Test.sql para abrir el archivo de origen del script de prueba predeterminado. Agregue el script de prueba, uno que invoque el código que se va a depurar, al editor de texto. Consulte a continuación un script de ejemplo.

  5. Coloque uno o varios puntos de interrupción en el código fuente. Haga clic con el botón derecho en una línea de código en el editor de texto, dentro de la función o rutina que desea depurar y seleccione Punto de interrupción e Insertar punto de interrupción. Se agrega el punto de interrupción, resaltando la línea de código en rojo.

  6. En el menú Depurar , seleccione Iniciar depuración para compilar, implementar y probar el proyecto. El script de prueba de Test.sql se ejecutará y se invocará el objeto de base de datos administrada.

  7. Cuando la flecha amarilla que designa el puntero de instrucción aparece en la ejecución del código de punto de interrupción se pausa y puede empezar a depurar el objeto de base de datos administrado. Puede pasar paso a paso desde el menú Depurar para avanzar el puntero de instrucción a la siguiente línea de código. La ventana Variables locales se usa para observar el estado de los objetos resaltados actualmente por el puntero de instrucción. Las variables se pueden agregar a la ventana Inspección . El estado de las variables observadas se puede observar en toda la sesión de depuración, no solo cuando la variable está en la línea de código resaltada actualmente por el puntero de instrucción. Seleccione Continuar en el menú Depurar para avanzar el puntero de instrucción al siguiente punto de interrupción o para completar la ejecución de la rutina si no hay más puntos de interrupción.

Ejemplo

En el ejemplo siguiente se devuelve la versión de SQL Server al autor de la llamada.

C#

using System;  
using System.Data;  
using System.Data.SqlTypes;  
using System.Data.SqlClient;  
using Microsoft.SqlServer.Server;   
  
public class StoredProcedures   
{  
   [Microsoft.SqlServer.Server.SqlProcedure]  
   public static void GetVersion()  
   {  
   using(SqlConnection connection = new SqlConnection("context connection=true"))   
   {  
      connection.Open();  
      SqlCommand command = new SqlCommand("select @@version",  
                                           connection);  
      SqlContext.Pipe.ExecuteAndSend(command);  
      }  
   }  
}  

Visual Basic

Imports System  
Imports System.Data  
Imports System.Data.Sql  
Imports System.Data.SqlTypes  
Imports Microsoft.SqlServer.Server  
Imports System.Data.SqlClient  
  
Partial Public Class StoredProcedures   
    <Microsoft.SqlServer.Server.SqlProcedure> _  
    Public Shared Sub GetVersion()  
        Using connection As New SqlConnection("context connection=true")  
            connection.Open()  
            Dim command As New SqlCommand("SELECT @@VERSION", connection)  
            SqlContext.Pipe.ExecuteAndSend(command)  
        End Using  
    End Sub  
End Class  

A continuación se muestra un script de prueba que invoca el procedimiento almacenado GetVersion definido anteriormente.

EXEC GetVersion  

Véase también

Conceptos de programación de integración de Common Language Runtime (CLR)