Freigeben über


Gewusst wie: Erstellen und Ausführen einer gespeicherten SQL Server-Prozedur mithilfe von Common Language Runtime-Integration

Erstellen Sie gespeicherte SQL-Prozeduren, indem Sie SQL Server Common Language Runtime (SQL CLR)-Datenbankprojekten Elemente vom Typ Gespeicherte Prozedur hinzufügen. Nach einer erfolgreichen Bereitstellung auf einem Computer mit SQL Server werden gespeicherte Prozeduren, die in verwaltetem Code erstellt wurden, genauso aufgerufen und ausgeführt wie alle anderen gespeicherten Prozeduren.

Tipp

Die angezeigten Dialogfelder und Menübefehle können sich je nach den aktiven Einstellungen oder der verwendeten Version von den in der Hilfe beschriebenen unterscheiden. Klicken Sie im Menü Extras auf Einstellungen importieren und exportieren, um die Einstellungen zu ändern. Weitere Informationen hierzu finden Sie unter Arbeiten mit Einstellungen.

Erstellen von gespeicherten SQL Server-Prozeduren

So erstellen Sie eine gespeicherte SQL Server-Prozedur

  1. Öffnen Sie ein vorhandenes SQL CLR-Datenbankprojekt, oder erstellen Sie ein neues. Weitere Informationen finden Sie unter Gewusst wie: Erstellen eines Projekts für Datenbankobjekte, die Common Language Runtime-Integration von SQL Server verwenden.

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

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

  4. Geben Sie einen Namen für die neue gespeicherte Prozedur ein.

  5. Fügen Sie den Code hinzu, der beim Ausführen der gespeicherten Prozedur ausgeführt werden soll. Sehen Sie sich dazu das erste Beispiel an, das auf dieses Verfahren folgt.

  6. Öffnen Sie im Projektmappen-Explorer den Ordner TestScripts, und doppelklicken Sie auf die Daten Test.sql.

    Tipp

    Sie können andere Skripts als das standardmäßige Debugskript angeben. Weitere Informationen finden Sie unter Gewusst wie: Bearbeiten des Skripts Test.sql zum Ausführen von Objekten, die Common Language Runtime-Integration von SQL Server verwenden.

  7. Fügen Sie der Datei Test.sql Code hinzu, um die gespeicherte Prozedur auszuführen. Sehen Sie sich dazu das zweite Beispiel an, das auf dieses Verfahren folgt.

  8. Drücken Sie F5, um die gespeicherte Prozedur zu erstellen, bereitzustellen und zu debuggen. Informationen zum Bereitstellen ohne Debugging finden Sie unter Gewusst wie: Bereitstellen von SQL CLR-Datenbankprojektelementen auf einem SQL-Server.

    Wichtig

    SQL Server 2005 und SQL Server 2008 unterstützen nur SQL Server-Projekte, die mit den Versionen 2.0, 3.0 oder 3.5 von .NET Framework erstellt wurden. Wenn Sie ein SQL Server-Projekt in SQL Server 2005 oder SQL Server 2008 bereitstellen, wird ein Fehler angezeigt: Deploy error (SQL01268): .NET SqlClient Data Provider: Msg 6218, Level 16, State 3, Line 1 CREATE ASSEMBLY for assembly 'AssemblyName' failed because assembly 'AssemblyName' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database (wobei AssemblyName der Name der Assembly ist, die Sie bereitstellen). Weitere Informationen finden Sie unter Gewusst wie: Erstellen eines Projekts für Datenbankobjekte, die Common Language Runtime-Integration von SQL Server verwenden.

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

Beispiel

Im folgenden Codebeispiel wird eine gespeicherte Prozedur erstellt, mit der ein Datensatz in die Currency-Tabelle der Beispieldatenbank AdventureWorks eingefügt wird. Stellen Sie die gespeicherte Prozedur nach ihrer Erstellung auf dem SQL-Server bereit. Weitere Informationen finden Sie unter Gewusst wie: Bereitstellen von SQL CLR-Datenbankprojektelementen auf einem 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();
        }
    }
}

Fügen Sie der Datei Test.sql im Ordner TestScripts des Projekts Code hinzu, um die gespeicherte Prozedur auszuführen und zu testen. Wenn Sie z. B. eine gespeicherte Prozedur bereitgestellt haben, führen Sie sie aus, indem Sie EXEC <StoredProcedureName> aufrufen und alle erwarteten Parameter übergeben. Wenn die gespeicherte Prozedur keine Werte zurückgibt, fügen Sie zusätzlichen Code ein, um zu überprüfen, ob die Daten von der gespeicherten Prozedur bearbeitet wurden.

Tipp

Wenn Sie das Beispiel mit Visual C# erstellt haben, müssen Sie den Namen der gespeicherten Prozedur im folgenden Beispiel durch "InsertCurrency_CS" ersetzen.

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

Siehe auch

Aufgaben

Gewusst wie: Erstellen eines Projekts für Datenbankobjekte, die Common Language Runtime-Integration von SQL Server verwenden

Gewusst wie: Erstellen und Ausführen eines SQL Server-Triggers mithilfe von Common Language Runtime-Integration

Gewusst wie: Erstellen und Ausführen eines SQL Server-Aggregats mithilfe von Common Language Runtime-Integration

Gewusst wie: Erstellen und Ausführen einer benutzerdefinierten SQL Server-Funktion mithilfe von Common Language Runtime-Integration

Gewusst wie: Erstellen und Ausführen eines benutzerdefinierten SQL Server-Typs mithilfe von Common Language Runtime-Integration

Exemplarische Vorgehensweise: Erstellen einer gespeicherten Prozedur in verwaltetem Code

Gewusst wie: Debuggen einer gespeicherten Prozedur in SQL/CLR

Referenz

Attribute für SQL CLR-Datenbankprojekte und Datenbankobjekte

Konzepte

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

Vorteile von verwaltetem Code bei der Erstellung von Datenbankobjekten

Teamentwicklung von Datenbanken mit SQLCLR-Objektverweisen

Erstellen von SQL Server-Objekten in verwaltetem Code

Weitere Ressourcen

SQL CLR-Datenbankdebuggen