Tutorial: Crear un procedimiento almacenado en código administrado

Actualización: noviembre 2007

Ya se pueden escribir los procedimientos almacenados para las bases de datos de SQL Server 2005 en código administrado mediante lenguajes de .NET Framework, como Visual Basic, C# y C++. Los procedimientos almacenados escritos en código administrado se denominan procedimientos almacenados de CLR.

Puede crear procedimientos almacenados de SQL agregando elementos de tipo Procedimiento almacenado a los proyectos de SQL Server. Después de implementar correctamente un SQL Server, se llaman y se ejecutan los procedimientos almacenados creados en código administrado como cualquier otro procedimiento almacenado.

Entre las tareas que se describen en este tutorial se incluyen las siguientes:

  • Crear un proyecto nuevo de Aplicación para Windows.

  • Crear un procedimiento almacenado en código administrado.

  • Implementar el procedimiento almacenado en una base de datos de SQL Server 2005.

  • Crear un script para probar el procedimiento almacenado en la base de datos.

  • Consultar datos en la base de datos para confirmar que el procedimiento almacenado se ejecuta correctamente.

Requisitos previos

Para poder completar este tutorial, necesitará:

Crear el proyecto

Para crear el nuevo proyecto SQL Server

  1. Desde el menú Archivo, cree un nuevo proyecto.

  2. Seleccione Proyecto de SQL Server, asigne al proyecto el nombre SQLCLRStoredProcedure y haga clic en Aceptar. Para obtener más información, vea Cómo: Crear un proyecto de SQL Server.

Conectar a una base de datos de SQL Server 2005

Este tutorial requiere disponer de una conexión a la base de datos de ejemplo AdventureWorks que se ejecuta en SQL Server 2005. Si no hay ninguna conexión disponible a la base de datos de ejemplo AdventureWorks en el Explorador de servidores, se incluirá en la lista del Agregar referencia de base de datos (Cuadro de diálogo).

Nota:

De forma predeterminada, la característica de integración de Common Language Runtime (CLR) está desactivada en Microsoft SQL Server. Debe estar habilitada para poder usar elementos de proyecto de SQL Server. Para habilitar la integración de CLR, utilice la opción clr enabled del procedimiento almacenado sp_configure. Para obtener más información, vea Habilitación de la integración CLR.

Para conectarse a la base de datos de ejemplo AdventureWorks

Crear el procedimiento almacenado SQL Server

Después de crear el proyecto SQL Server, agréguele un procedimiento almacenado.

Para crear el procedimiento almacenado de SQL Server

  1. En el menú Proyecto, haga clic en Agregar nuevo elemento.

  2. Seleccione Procedimiento almacenado en Agregar nuevo elemento (Cuadro de diálogo).

  3. Escriba InsertCurrency como Nombre para el nuevo procedimiento almacenado.

  4. Haga clic en Agregar.

  5. Reemplace el código en el Editor de código con lo siguiente:

    Nota:

    Los ejemplos en C++ se deben compilar con la opción /clr:safe del compilador.

    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Data.SqlTypes
    Imports Microsoft.SqlServer.Server
    
    Partial Public Class StoredProcedures
    
        <SqlProcedure()> _
        Public Shared Sub InsertCurrency( _
            ByVal currencyCode As SqlString, ByVal name As SqlString)
    
            Using conn As New SqlConnection("context connection=true")
    
                Dim InsertCurrencyCommand As New SqlCommand()
                Dim currencyCodeParam As New SqlParameter("@CurrencyCode", SqlDbType.NVarChar)
                Dim nameParam As New SqlParameter("@Name", SqlDbType.NVarChar)
    
                currencyCodeParam.Value = currencyCode
                nameParam.Value = name
    
    
                InsertCurrencyCommand.Parameters.Add(currencyCodeParam)
                InsertCurrencyCommand.Parameters.Add(nameParam)
    
                InsertCurrencyCommand.CommandText = _
                    "INSERT Sales.Currency (CurrencyCode, Name, ModifiedDate)" & _
                    " VALUES(@CurrencyCode, @Name, GetDate())"
    
                InsertCurrencyCommand.Connection = conn
    
                conn.Open()
                InsertCurrencyCommand.ExecuteNonQuery()
                conn.Close()
            End Using
        End Sub
    End Class
    
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Data.SqlTypes;
    using Microsoft.SqlServer.Server;
    
    
    public partial class StoredProcedures
    {
        [SqlProcedure()]
        public static void InsertCurrency_CS(
            SqlString currencyCode, SqlString name)
        {
            using (SqlConnection conn = new SqlConnection("context connection=true"))
            {
                SqlCommand InsertCurrencyCommand = new SqlCommand();
                SqlParameter currencyCodeParam = new SqlParameter("@CurrencyCode", SqlDbType.NVarChar);
                SqlParameter nameParam = new SqlParameter("@Name", SqlDbType.NVarChar);
    
                currencyCodeParam.Value = currencyCode;
                nameParam.Value = name;
    
                InsertCurrencyCommand.Parameters.Add(currencyCodeParam);
                InsertCurrencyCommand.Parameters.Add(nameParam);
    
                InsertCurrencyCommand.CommandText =
                    "INSERT Sales.Currency (CurrencyCode, Name, ModifiedDate)" +
                    " VALUES(@CurrencyCode, @Name, GetDate())";
    
                InsertCurrencyCommand.Connection = conn;
    
                conn.Open();
                InsertCurrencyCommand.ExecuteNonQuery();
                conn.Close();
            }
        }
    }
    
    #include "stdafx.h"
    
    #using <System.dll>
    #using <System.Data.dll>
    #using <System.Xml.dll>
    
    using namespace System;
    using namespace System::Data;
    using namespace System::Data::Sql;
    using namespace System::Data::SqlClient;
    using namespace System::Data::SqlTypes;
    using namespace Microsoft::SqlServer::Server;
    
    // In order to debug your Stored Procedure, add the following to your debug.sql file:
    //
    // EXEC InsertCurrency_CPP 'AAA', 'Currency Test'
    // SELECT * FROM Sales.Currency WHERE CurrencyCode = 'AAA'
    
    public ref class StoredProcedures
    {
    public:
        [SqlProcedure]
        static void InsertCurrency_CPP(SqlString currencyCode, SqlString name)
        {
            SqlConnection ^conn = gcnew SqlConnection("context connection=true");
    
            SqlCommand ^insertCurrencyCommand = gcnew SqlCommand();
            SqlParameter ^currencyCodeParam =
                gcnew SqlParameter("@CurrencyCode", SqlDbType::NVarChar);
            SqlParameter ^nameParam =
                gcnew SqlParameter("@Name", SqlDbType::NVarChar);
    
            insertCurrencyCommand->CommandText =
                "insert Sales.Currency(CurrencyCode, Name, ModifiedDate)" +
                " values(@CurrencyCode, @Name)";
            insertCurrencyCommand->Connection = conn;
    
            conn->Open();
            insertCurrencyCommand->ExecuteNonQuery();
    
            conn->Close();
        }
    };
    

Implementar, ejecutar y depurar el procedimiento almacenado

Después de crear un nuevo procedimiento almacenado, se puede generar, implementar en el servidor SQL y depurar presionando F5. Primero, en el archivo Test.sql situado en la carpeta TestScripts de su proyecto, agregue código para ejecutar y probar su procedimiento almacenado. En Visual C++, este archivo se denomina debug.sql. Para obtener más información acerca de la creación de los scripts de prueba, vea Cómo: Editar la secuencia de comandos Test.sql para ejecutar objetos SQL.

Para obtener más información sobre la depuración de SQL, vea Depurar objetos de bases de datos SQL.

Para implementar y ejecutar el procedimiento almacenado InsertCurrency

  1. Para Visual Basic y Visual C#, en el Explorador de soluciones, expanda la carpeta SecuenciasDePrueba y haga doble clic en el archivo Test.sql.

    Para Visual C++, en el Explorador de soluciones, haga doble clic en el archivo debug.sql.

  2. Sustituya el código del archivo Test.sql (debug.sql en Visual C++) por el código siguiente:

    EXEC InsertCurrency 'AAA', 'Currency Test'
    SELECT * from Sales.Currency where CurrencyCode = 'AAA'
    
  3. Presione F5 para generar, implementar y depurar el procedimiento almacenado. Para obtener información sobre cómo implementar sin depurar, vea Cómo: Implementar elementos de proyecto de SQL Server en un servidor SQL Server.

    Vea los resultados que se muestran en la ventana Resultados y seleccione Mostrar resultados desde: Resultado de base de datos.

Vea también

Tareas

Cómo: Crear y ejecutar un procedimiento CLR almacenado de SQL Server

Cómo: Crear y ejecutar un desencadenador CLR de SQL Server

Cómo: Crear y ejecutar un agregado CLR de SQL Server

Cómo: Crear y ejecutar una función CLR de servidor SQL Server definido por el usuario

Cómo: Crear y ejecutar un tipo CLR de servidor SQL Server definido por el usuario

Cómo: Depurar un procedimiento almacenado de SQL CLR

Conceptos

Introduction to SQL Server CLR Integration (ADO.NET)

Ventajas de utilizar código administrado para crear objetos de base de datos

Plantillas de elementos para proyectos de SQL Server

Referencia

Atributos para proyectos de servidor SQL Server y objetos de base de datos

Otros recursos

Depuración de bases de datos de SQL CLR