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
Ö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.
Klicken Sie im Menü Projekt auf Neues Element hinzufügen.
Wählen Sie im Dialogfeld Neues Element hinzufügen die Option Gespeicherte Prozedur aus.
Geben Sie einen Namen für die neue gespeicherte Prozedur ein.
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.
Ö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.
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.
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.
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
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