Практическое руководство. Создание и запуск хранимой процедуры SQL Server в среде CLR
Обновлен: Ноябрь 2007
Можно создать сохраненные процедуры SQL путем добавления элементов Сохраненная процедура в проекты SQL Server. После успешного развертывания на сервере SQL Server сохраненные процедуры, созданные в управляемом коде, вызываются и выполняются как любые другие сохраненные процедуры.
Примечание. |
---|
Общее средство интеграции среды выполнения языка (CLR) по умолчанию в Microsoft SQL Server отключено и должно быть включено для использования элементов проекта SQL Server. Для включения интеграции со средой CLR используйте параметр clr enabled хранимой процедуры sp_configure. Дополнительные сведения см. в разделе Включение интеграции со средой CLR. |
Примечание. |
---|
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке, в зависимости от текущих параметров или выпуска. Для изменения параметров выберите в меню Сервис команду Параметры импорта и экспорта. Дополнительные сведения см. в разделеПараметры Visual Studio. |
Создание сохраненной процедуры SQL Server
Для создания сохраненной процедуры SQL Server:
Откройте существующий Проект SQL Server или создайте новый. Дополнительные сведения см. в разделе Практическое руководство. Создание проекта SQL Server.
В меню Проект выберите команду Добавить новый элемент.
Выберите Сохраненная процедура в Диалоговое окно "Добавление нового элемента".
Введите Имя для новой сохраненной процедуры.
Добавьте код для запуска при выполнении сохраненной процедуры. См. пример, приведенный ниже.
Примечание. Примеры C++ должны быть скомпилированы с параметром компилятора /clr:safe.
Для Visual Basic и Visual C# в Обозревателе решений откройте папку TestScripts и дважды щелкните файл Test.sql.
Для Visual C++ в Обозревателе решений откройте файл debug.sql.
Добавьте код в файл Test.sql (debug.sql для Visual C++) для запуска сохраненной процедуры. Обратитесь ко второму примеру, представленному ниже.
Нажмите клавишу F5, чтобы скомпилировать, развернуть и выполнить отладку сохраненной процедуры. Сведения о развертывании без отладки содержатся в разделе Практическое руководство. Развертывание элементов проекта SQL Server на сервере SQL Server.
Просмотрите результаты, которые отображаются в окне Окно выходных данных, и выберите Показать вывод из: вывода базы данных.
Пример
В следующем примере кода создается сохраненная процедура, которая вставляет запись в таблицу 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 и объектов баз данных