Пошаговое руководство. Создание хранимой процедуры в управляемом коде

Обновлен: Ноябрь 2007

Теперь можно записать сохраненные процедуры для баз данных SQL Server 2005 в управляемом коде с помощью языков .NET Framework, например, с помощью Visual Basic, C# и C++. Хранимые процедуры, написанные в управляемом коде, называются сохраненными процедурами среды CLR.

Можно создать сохраненные процедуры SQL путем добавления элементов Сохраненная процедура в проекты SQL Server. После успешного развертывания на сервере SQL Server сохраненные процедуры, созданные в управляемом коде, вызываются и выполняются как любые другие сохраненные процедуры.

Задачи, иллюстрируемые в этом пошаговом руководстве, включают:

  • Создание нового проекта Приложение Windows.

  • Создание сохраненной процедуры в управляемом коде.

  • Развертывание сохраненной процедуры в базе данных SQL Server 2005.

  • Создание сценария для проверки хранимой процедуры в базе данных.

  • Запрос данных из базы данных для подтверждения правильности выполнения сохраненной процедуры.

Обязательные компоненты

Для выполнения этого пошагового руководства потребуется следующее:

Создание проекта

Чтобы создать новый проект SQL Server:

  1. В меню Файл создайте новый проект.

  2. Выберите Проект SQL Server, назовите проект SQLCLRStoredProcedure и нажмите OK. Дополнительные сведения см. в разделе Практическое руководство. Создание проекта SQL Server.

Подключение к базе данных SQL Server 2005

В данном пошаговом руководстве требуется подключение к базе данных AdventureWorks на SQL Server 2005. Если подключение к базе данных AdventureWorks доступно в Обозревателе серверов, оно будет занесено в список в Диалоговое окно "Добавление ссылки на базу данных".

zxsa8hkf.alert_note(ru-ru,VS.90).gifПримечание.

По умолчанию функция интеграции среды выполнения CLR) в Microsoft SQL Server отключена. Для использования элементов проекта SQL Server эту функцию интеграции необходимо включить. Чтобы включить интеграцию со средой CLR, используйте параметр clr enabled сохраненной процедуры sp_configure. Дополнительные сведения см. в разделе Включение интеграции со средой CLR.

Для подключения к базе данных AdventureWorks:

Создание сохраненной процедуры SQL Server

После создания проекта SQL Server добавьте к нему сохраненную процедуру.

Для создания сохраненной процедуры SQL Server:

  1. В меню Проект выберите команду Добавить новый элемент.

  2. Выберите Сохраненная процедура в Диалоговое окно "Добавление нового элемента".

  3. Введите InsertCurrency в качестве Имени для новой сохраненной процедуры.

  4. Нажмите кнопку Добавить.

  5. В редакторе кодов замените код на следующий:

    zxsa8hkf.alert_note(ru-ru,VS.90).gifПримечание.

    Примеры 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();
        }
    };
    

Развертывание, выполнение и отладка сохраненной процедуры

После создания новой сохраненной процедуры ее можно откомпилировать, развернуть на сервере SQL и отладить нажатием клавиши F5. Сначала в файл Test.sql, находящийся в папке TestScripts проекта, добавьте код для выполнения и проверки сохраненной процедуры. Для Visual C++ этот файл называется debug.sql. Для получения дополнительных сведений о создании сценариев проверки см.: Практическое руководство. Изменение сценария Test.sql для запуска объектов SQL.

Дополнительные сведения об отладке SQL см. в разделе Отладка объектов баз данных SQL.

Для развертывания и запуска сохраненной процедуры InsertCurrency:

  1. Для Visual Basic и Visual C# в Обозревателе решений откройте папку TestScripts и дважды щелкните файл Test.sql.

    Для Visual C++ в Обозревателе решений дважды щелкните файл Debug.sql.

  2. Замените код в файле Test.sql (debug.sql в Visual C++) следующим кодом:

    EXEC InsertCurrency 'AAA', 'Currency Test'
    SELECT * from Sales.Currency where CurrencyCode = 'AAA'
    
  3. Нажмите клавишу F5, чтобы скомпилировать, развернуть и выполнить отладку сохраненной процедуры. Сведения о развертывании без отладки содержатся в разделе Практическое руководство. Развертывание элементов проекта SQL Server на сервере SQL Server.

    Просмотрите результаты, которые отображаются в окне Выход, и выберите Показать выход из: Выход БД.

См. также

Задачи

Практическое руководство. Создание и запуск хранимой процедуры SQL Server в среде CLR

Практическое руководство. Создание и запуск триггера CLR SQL Server

Практическое руководство. Создание и выполнение статистических функций SQL Server в среде CLR

Практическое руководство. Создание и запуск пользовательской функции SQL Server в среде CLR

Практическое руководство. Создание и запуск пользовательского типа SQL Server в среде CLR

Практическое руководство. Отладка хранимой процедуры SQL CLR

Основные понятия

Введение в интеграцию SQL Server со средой CLR (ADO.NET)

Преимущества использования управляемого кода для создания объектов баз данных

Шаблоны элементов для проектов SQL Server

Ссылки

Атрибуты проектов SQL Server и объектов баз данных

Другие ресурсы

Отладка баз данных SQL в среде CLR