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:
- Eine Verbindung zur Beispieldatenbank AdventureWorks, die unter SQL Server 2005 ausgeführt wird. Weitere Informationen finden Sie unter Gewusst wie: Installieren von Beispieldatenbanken.
Erstellen des Projekts
So erstellen Sie ein neues SQL Server-Projekt
Erstellen Sie im Menü Datei ein neues Projekt.
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
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 InsertCurrency als Name der neuen gespeicherte Prozedur ein.
Klicken Sie auf Hinzufügen.
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
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.
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'
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