共用方式為


逐步解說:使用 Managed 程式碼建立預存程序

更新:2007 年 11 月

您現在可以使用 .NET Framework 語言,例如 Visual Basic、C# 和 C++,將 SQL Server 2005 資料庫的預存程序撰寫在 Managed 程式碼中。撰寫在 Managed 程式碼中的預存程序稱為 CLR 預存程序。

您可以將 [預存程序] 項目加入至 SQL Server 專案,以建立 SQL 預存程序。順利部署至 SQL Server 之後,便可如同其他預存程序般,呼叫和執行以 Managed 程式碼所建立的預存程序。

本逐步解說所述的工作包括下列各項:

  • 建立新的 [Windows 應用程式] 專案。

  • 以 Managed 程式碼建立預存程序。

  • 將預存程序部署至 SQL Server 2005 資料庫。

  • 建立指令碼,在資料庫上測試預存程序。

  • 查詢資料庫中的資料,以確認預存程序正常執行。

必要條件

若要完成這個逐步解說,您必須要有:

建立專案

若要建立新的 SQL Server 專案

  1. 從 [檔案] 功能表中,建立新專案。

  2. 選取 [SQL Server 專案],將專案命名為 SQLCLRStoredProcedure,再按一下 [確定]。如需詳細資訊,請參閱 HOW TO:建立 SQL Server 專案

連接到 SQL Server 2005 資料庫

此逐步解說需要連接至在 SQL Server 2005 上執行的 AdventureWorks 範例資料庫。如果 [伺服器總管] 中有 AdventureWorks 範例資料庫的連接,此連接會列在加入資料庫參考對話方塊中。

注意事項:

根據預設,Microsoft SQL Server 中的 Common Language Runtime (CLR) 整合功能已關閉。您必須啟用它,才能使用 SQL Server 專案項目。若要啟用 CLR 整合,請使用 sp_configure 預存程序的 clr enabled 選項。如需詳細資訊,請參閱啟用 CLR 整合

若要連接到 AdventureWorks 範例資料庫

建立 SQL Server 預存程序

建立 SQL Server 專案之後,將預存程序加入此專案。

若要建立 SQL Server 預存程序

  1. 在 [專案] 功能表上,按一下 [加入新項目]。

  2. 加入新項目對話方塊中,選取 [預存程序]。

  3. 輸入 InsertCurrency 做為新預存程序的 [名稱]。

  4. 按一下 [加入]。

  5. 以下列程式碼取代 [程式碼編輯器] 中的程式碼:

    注意事項:

    C++ 範例必須使用 /clr:safe 編譯器選項進行編譯。

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

部署、執行和偵錯預存程序

建立新的預存程序之後,按下 F5 即可進行建置、部署至 SQL Server 和偵錯等作業。首先,將執行和測試預存程序的程式碼,加入至專案中 TestScripts 資料夾的 Test.sql 檔案內。在 Visual C++ 中,這個檔案的名稱為 debug.sql。如需建立測試指令碼的詳細資訊,請參閱 HOW TO:編輯 Test.sql 指令碼以執行 SQL 物件

如需偵錯 SQL 的詳細資訊,請參閱偵錯 SQL 資料庫物件

若要部署及執行 InsertCurrency 預存程序

  1. 若為 Visual Basic 和 Visual C#,請在 [方案總管] 中,展開 [TestScripts] 資料夾,並按兩下 [Test.sql] 檔案。

    若為 Visual C++,請在 [方案總管] 中,按兩下 [debug.sql] 檔案。

  2. 以下列程式碼取代 Test.sql (在 Visual C++ 中為 debug.sql) 檔案中的程式碼:

    EXEC InsertCurrency 'AAA', 'Currency Test'
    SELECT * from Sales.Currency where CurrencyCode = 'AAA'
    
  3. 按下 F5,即可建置、部署和偵錯預存程序。如需在不偵錯的情況下進行部署的詳細資訊,請參閱 HOW TO:將 SQL Server 專案項目部署至 SQL Server

    檢視 [輸出] 視窗中的結果,並選取 [顯示輸出來源: 資料庫輸出]。

請參閱

工作

HOW TO:建立及執行 CLR SQL Server 預存程序

HOW TO:建立及執行 CLR SQL Server 觸發程序

HOW TO:建立及執行 CLR SQL Server 彙總

HOW TO:建立及執行 CLR SQL Server 使用者定義函式

HOW TO:建立及執行 CLR SQL Server 使用者定義型別

HOW TO:偵錯 SQL CLR 預存程序

概念

SQL Server CLR 整合簡介 (ADO.NET)

使用 Managed 程式碼建立資料庫物件的好處

SQL Server 專案的項目範本

參考

SQL Server 專案和資料庫物件的屬性

其他資源

SQL CLR 資料庫偵錯