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

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

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

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

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

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

Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке, в зависимости от текущих параметров или выпуска. Для изменения параметров выберите в меню Сервис команду Параметры импорта и экспорта. Дополнительные сведения см. в разделеПараметры Visual Studio.

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

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

  1. Откройте существующий Проект SQL Server или создайте новый. Дополнительные сведения см. в разделе Практическое руководство. Создание проекта SQL Server.

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

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

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

  5. Добавьте код для запуска при выполнении сохраненной процедуры. См. пример, приведенный ниже.

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

    Примеры C++ должны быть скомпилированы с параметром компилятора /clr:safe.

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

    Для Visual C++ в Обозревателе решений откройте файл debug.sql.

  7. Добавьте код в файл Test.sql (debug.sql для Visual C++) для запуска сохраненной процедуры. Обратитесь ко второму примеру, представленному ниже.

  8. Нажмите клавишу F5, чтобы скомпилировать, развернуть и выполнить отладку сохраненной процедуры. Сведения о развертывании без отладки содержатся в разделе Практическое руководство. Развертывание элементов проекта SQL Server на сервере SQL Server.

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

Пример

В следующем примере кода создается сохраненная процедура, которая вставляет запись в таблицу Currency базы данных Adventure Works. После создания сохраненной процедуры разверните ее на SQL Server. Дополнительные сведения см. в разделе Практическое руководство. Развертывание элементов проекта SQL Server на сервере 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();
        }
    }
}
#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();
    }
};

Добавьте код для запуска и тестирования сохраненной процедуры в файл Test.sql (debug.sql в Visual C++) в папке проекта TestScripts. Например, если развернута сохраненная процедура, запустите ее, вызвав EXEC <StoredProcedureName> и передав корректные параметры. Если сохраненная процедура не возвращает никаких значений, вставьте дополнительный код для проверки данных, на которые влияет сохраненная процедура.

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

См. также

Задачи

Практическое руководство. Создание проекта 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