Compartir a través de


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

Actualización: noviembre 2007

Cree procedimientos almacenados de SQL agregando elementos de tipo Procedimiento almacenado a los proyectos de SQL Server. Tras una correcta implementación en un equipo donde se ejecuta SQL Server, los procedimientos almacenados creados en código administrado se llaman y ejecutan como cualquier otro procedimiento almacenado.

Nota:

La característica de integración Common Language Runtime (CLR) está desactivada de forma predeterminada en Microsoft SQL Server y se debe habilitar con el fin de utilizar los elementos de los proyectos de SQL Server. Para habilitar la integración 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.

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 Valores de configuración de Visual Studio.

Crear procedimientos almacenados de SQL Server

Para crear un procedimiento almacenado de SQL Server

  1. Abra un Proyecto de SQL Server existente o cree uno nuevo. Para obtener más información, vea Cómo: Crear un proyecto de SQL Server.

  2. En el menú Proyecto, elija Agregar nuevo elemento.

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

  4. Escriba un Nombre para el nuevo procedimiento almacenado.

  5. Agregue el código que se ejecutará cuando se ejecute el procedimiento almacenado. Vea el ejemplo siguiente.

    Nota:

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

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

    Para Visual C++, en el Explorador de soluciones, abra el archivo debug.sql.

  7. Agregue el código al archivo Test.sql (debug.sql para Visual C++) para ejecutar el procedimiento almacenado. Vea el segundo ejemplo a continuación.

  8. 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.

  9. Vea los resultados en Resultados (Ventana) y seleccione Mostrar resultados desde: Resultado de base de datos.

Ejemplo

El ejemplo de código siguiente crea un procedimiento almacenado que inserta un registro en la tabla Moneda de la base de datos de ejemplo de Deportes de aventura. Después de crear el procedimiento almacenado, impleméntelo en el servidor de SQL Server. Para obtener más información, vea Cómo: Implementar elementos de proyecto de SQL Server en un servidor SQL Server.

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();
    }
};

Agregue el código para ejecutar y probar su procedimiento almacenado en el archivo Test.sql (debug.sql en Visual C++) de la carpeta SecuenciasDePrueba de su proyecto. Por ejemplo, si implementó un procedimiento almacenado, ejecútelo llamando a EXEC <StoredProcedureName> y pasando cualquier parámetro esperado. Si su procedimiento almacenado no devuelve ningún valor, inserte código adicional para comprobar si los datos se vieron afectados por el procedimiento almacenado.

EXEC InsertCurrency 'AAA', 'Currency Test'
SELECT * from Sales.Currency where CurrencyCode = 'AAA'

Vea también

Tareas

Cómo: Crear un proyecto de SQL Server

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

Tutorial: Crear un procedimiento almacenado en código administrado

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