Freigeben über


Exemplarische Vorgehensweise: Erstellen einer gespeicherten Prozedur in verwaltetem Code

Aktualisiert: November 2007

Gespeicherte Prozeduren für SQL Server 2005-Datenbanken können jetzt mithilfe von .NET Framework-Sprachen wie Visual Basic, Visual C# und Visual C++ in verwaltetem Code geschrieben werden. In verwaltetem Code geschriebene gespeicherte Prozeduren werden als gespeicherte CLR-Prozeduren bezeichnet.

Sie können gespeicherte SQL-Prozeduren erstellen, indem Sie SQL Server-Projekten Elemente vom Typ Gespeicherte Prozedur hinzufügen. Nach einer erfolgreichen Bereitstellung auf einem SQL-Server werden gespeicherte Prozeduren, die in verwaltetem Code erstellt wurden, genauso aufgerufen und ausgeführt wie alle anderen gespeicherten Prozeduren.

In dieser exemplarischen Vorgehensweise werden u. a. die folgenden Aufgaben veranschaulicht:

  • Erstellen eines neuen Windows-Anwendung-Projekts.

  • Erstellen einer gespeicherten Prozedur in verwaltetem Code

  • Bereitstellen der gespeicherten Prozedur für eine SQL Server 2005-Datenbank

  • Erstellen eines Skripts zum Testen der gespeicherten Prozedur für die Datenbank.

  • Abfragen von Daten aus der Datenbank, um zu bestätigen, dass die gespeicherte Prozedur ordnungsgemäß ausgeführt wird.

Vorbereitungsmaßnahmen

Für die Durchführung dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:

Erstellen des Projekts

So erstellen Sie ein neues SQL Server-Projekt

  1. Erstellen Sie im Menü Datei ein neues Projekt.

  2. Wählen Sie SQL Server-Projekt aus, nennen Sie das Projekt SQLCLRStoredProcedure, und klicken Sie auf OK. Weitere Informationen finden Sie unter Gewusst wie: Erstellen eines SQL Server-Projekts.

Herstellen einer Verbindung zu einer SQL Server 2005-Datenbank

Für diese exemplarische Vorgehensweise ist eine Verbindung mit der unter SQL Server 2005 ausgeführten Datenbank AdventureWorks erforderlich. Wenn im Server-Explorer eine Verbindung mit der Datenbank AdventureWorks verfügbar ist, wird diese in Dialogfeld "Datenbankverweis hinzufügen" aufgeführt.

Hinweis:

Standardmäßig ist in Microsoft SQL Servern das Common Language Runtime (CLR)-Integrationsfeature deaktiviert. Es muss jedoch aktiviert werden, um SQL Server-Projektelemente zu verwenden. Die CLR-Integration kann mithilfe der clr enabled-Option der gespeicherten sp_configure-Prozedur aktiviert werden. Weitere Informationen finden Sie unter Aktivieren der CLR-Integration.

So stellen Sie eine Verbindung mit der AdventureWorks-Beispieldatenbank her

  • Stellen Sie eine Verbindung mit der Beispieldatenbank AdventureWorks her, die im Lieferumfang von SQL Server 2005 enthalten ist, indem Sie im Dialogfeld Verbindung hinzufügen die erforderlichen Eingaben vornehmen. Weitere Informationen finden Sie unter Verbindung hinzufügen/ändern (Microsoft SQL Server).

    – oder –

  • Wählen Sie im Dialogfeld Datenbankverweis hinzufügen eine vorhandene Verbindung mit der Beispieldatenbank AdventureWorks aus. Weitere Informationen finden Sie unter Dialogfeld "Datenbankverweis hinzufügen".

Erstellen der gespeicherten Prozedur für SQL Server

Fügen Sie dem SQL Server-Projekt eine gespeicherte Prozedur hinzu, nachdem es erstellt wurde.

So erstellen Sie eine gespeicherte SQL Server-Prozedur

  1. Klicken Sie im Menü Projekt auf Neues Element hinzufügen.

  2. Wählen Sie im Dialogfeld "Neues Element hinzufügen" die Option Gespeicherte Prozedur aus.

  3. Geben Sie InsertCurrency als Name der neuen gespeicherte Prozedur ein.

  4. Klicken Sie auf Hinzufügen.

  5. Ersetzen Sie den Code im Code-Editor durch den folgenden Code:

    Hinweis:

    C++-Beispiele müssen mit der /clr:safe-Compileroption kompiliert werden.

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

Bereitstellen, Ausführen und Debuggen der gespeicherten Prozedur

Nach dem Erstellen einer neuen gespeicherten Prozedur können Sie F5 drücken, um die Prozedur zu erstellen, sie auf dem SQL-Server bereitstellen und sie zu debuggen. Fügen Sie zunächst im Ordner TestScripts des Projekts der Datei Test.sql Code hinzu, um die gespeicherte Prozedur auszuführen und zu testen. In Visual C++ lautet diese Datei debug.sql. Weitere Informationen zum Erstellen von Testskripts finden Sie unter Gewusst wie: Bearbeiten des Test.sql-Skripts für das Ausführen von SQL-Objekten.

Weitere Informationen zum Debuggen von SQL finden Sie unter Debuggen von SQL-Datenbankobjekten.

So stellen Sie die gespeicherte InsertCurrency-Prozedur bereit und führen sie aus

  1. Erweitern Sie für Visual Basic und Visual C# im Projektmappen-Explorer den Ordner TestScripts, und doppelklicken Sie auf die Datei Test.sql.

    Doppelklicken Sie für Visual C++ im Projektmappen-Explorer auf die Datei debug.sql.

  2. Ersetzen Sie den Code in der Datei Test.sql (bzw. debug.sql in Visual C++) durch folgenden Code:

    EXEC InsertCurrency 'AAA', 'Currency Test'
    SELECT * from Sales.Currency where CurrencyCode = 'AAA'
    
  3. Drücken Sie F5, um die gespeicherte Prozedur zu erstellen, bereitzustellen und zu debuggen. Informationen zum Bereitstellen ohne Debuggen finden Sie unter Gewusst wie: Bereitstellen von SQL Server-Projektelementen auf einem SQL-Server.

    Zeigen Sie die Ergebnisse im Ausgabefenster an, und wählen Sie Ausgabe anzeigen von: Datenbankausgabe aus.

Siehe auch

Aufgaben

Gewusst wie: Erstellen und Ausführen einer gespeicherten CLR SQL Server-Prozedur

Gewusst wie: Erstellen und Ausführen eines CLR SQL Server-Triggers

Gewusst wie: Erstellen und Ausführen eines CLR SQL Server-Aggregats

Gewusst wie: Erstellen und Ausführen einer benutzerdefinierten CLR SQL Server-Funktion

Gewusst wie: Erstellen und Ausführen eines benutzerdefinierten CLR-SQL Server-Typs

Gewusst wie: Debuggen einer gespeicherten Prozedur in SQL/CLR

Konzepte

Einführung in CLR-Integration für SQL Server (ADO.NET)

Vorteile von verwaltetem Code bei der Erstellung von Datenbankobjekten

Elementvorlagen für SQL Server-Projekte

Referenz

Attribute für SQL Server-Projekte und Datenbankobjekte

Weitere Ressourcen

Debuggen von SQL CLR-Datenbanken