Tutorial: Depurar una función escalar definida por el usuario de SQL CLR
Este tema se aplica a:
Edición |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
||||
Standard |
||||
Pro y Team |
En este ejemplo se muestra cómo se depura una función definido por el usuario (UDF) de SQL Server Common Language Runtime (SQL CLR). Crea una nueva función definida por el usuario de SQL CLR en la base de datos de ejemplo AdventureWorks.
Si al intentar depurar un objeto SQL CLR, aparece el mensaje "Cancelado por el usuario", debe configurar manualmente el equipo en el que se ejecuta Visual Studio y el equipo en el que se ejecuta SQL Server. Para obtener más información, vea Cómo: Configurar sus equipos para habilitar la depuración Transact-SQL y SQL CLR.
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones del menú Herramientas. Para obtener más información, vea Trabajar con valores de configuración.
Para depurar una función escalar definida por el usuario de SQL CLR
En un nuevo proyecto de SQL CLR, establezca una conexión con la base de datos de ejemplo AdventureWorks. Para obtener más información, vea How to: Connect to a Database.
Cree una nueva función utilizando el código de la primera parte del ejemplo siguiente y asígnele el nombre OrderCount.cs. Para obtener más información, vea How to: Develop with the SQL Server Project Type.
Agregue un script que pruebe la función incluyéndola en una instrucción SELECT. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el directorio SecuenciasDePrueba, seleccione Agregar script de prueba e inserte el código de la segunda parte del ejemplo. Guarde el archivo con el nombre CallOrderCount.sql. Haga clic con el botón secundario del mouse en el nombre del archivo y elija Establecer como script de depuración predeterminado.
Sitúe un punto de interrupción en OrderCount.cs en la línea que crea una instancia de SqlCommand y, a continuación, en el menú Depurar, haga clic en Iniciar para compilar e implementar el proyecto y hacer pruebas unitarias del mismo. Cuando el puntero de instrucción, designado mediante una flecha amarilla, aparece sobre un punto de interrupción, se está depurando la función.
Pruebe diferentes características de depuración.
Recorra el código hasta después de la instrucción que crea una instancia de SqlCommand utilizando Paso a paso por instrucciones en el menú Depurar.
En la ventana Variables locales, abra la variable sqlComm, que es un SqlCommand, y examine sus miembros.
Haga clic en Paso a paso por instrucciones en el menú Depurar para ejecutar una línea de la función. Observe que se ha creado una instancia del miembro sqlComm.CommandText.
En el Editor de texto, arrastre sqlComm a cualquier ubicación en la ventana Inspección. La variable se agrega ahora a la lista de variables inspeccionadas.
Elija de nuevo Paso a paso por instrucciones y observe que se abre una nueva ventana denominada T-SQL dinámico, en la que se muestra la instrucción SQL que está a punto de ejecutarse.
Elija Paso a paso por instrucciones para ejecutar la instrucción y volver a la función.
Presione de nuevo Continuar y observe que se abre una segunda ventana T-SQL dinámico, en la que se muestra el código que devuelve el valor de la función.
Presione de nuevo Continuar para finalizar la depuración de la función.
Ejemplo
Éste es el código necesario para crear la función.
using System;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]
public static int OrderCount()
{
using (SqlConnection conn = new SqlConnection("context connection=true"))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT 42";
//cmd = new SqlCommand("SELECT 42",conn);
int result = (int)cmd.ExecuteScalar();
return result;
}
}
};
Este es el script de prueba que llama a la función.
SELECT dbo.OrderCount()