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

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

Примечание

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

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

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

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

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

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

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

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

  6. В окне Обозреватель решений откройте папку TestScripts и дважды щелкните файл Test.sql.

    Примечание

    В качестве скрипта отладки по умолчанию можно указать другие скрипты.Дополнительные сведения см. в разделе Практическое руководство. Изменение скрипта Test.sql для запуска объектов, использующих интеграцию SQL Server со средой CLR.

  7. Добавьте код в файл Test.sql для выполнения хранимой процедуры. Ознакомьтесь со вторым примером, следующим за этой процедурой.

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

    Важно!

    SQL Server 2005 и SQL Server 2008 поддерживают только проекты SQL Server, созданные с использованием версий 2.0, 3.0 и 3.5 платформы .NET Framework.Если вы попробуете развернуть SQL Server проекта SQL Server 2005 или SQL Server 2008, появляется сообщение об ошибке: 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(где имя_сборки — это имя сборки, развертывания).Дополнительные сведения см. в разделе Практическое руководство. Создание проекта для объектов базы данных, использующих интеграцию SQL Server со средой CLR.

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

Пример

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

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

Примечание

Если образец создан с помощью Visual C#, замените InsertCurrency_CS на имя хранимой процедуры в следующем примере.

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

См. также

Задачи

Практическое руководство. Создание проекта для объектов базы данных, использующих интеграцию SQL Server со средой CLR

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

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

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

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

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

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

Ссылки

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

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

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

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

Начало командной разработки баз данных, ссылающихся на объекты SQLCLR

Создание объектов SQL Server в управляемом коде

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

SQL CLR Database Debugging