Пошаговое руководство. Создание хранимой процедуры в управляемом коде
Обновлен: Ноябрь 2007
Теперь можно записать сохраненные процедуры для баз данных SQL Server 2005 в управляемом коде с помощью языков .NET Framework, например, с помощью Visual Basic, C# и C++. Хранимые процедуры, написанные в управляемом коде, называются сохраненными процедурами среды CLR.
Можно создать сохраненные процедуры SQL путем добавления элементов Сохраненная процедура в проекты SQL Server. После успешного развертывания на сервере SQL Server сохраненные процедуры, созданные в управляемом коде, вызываются и выполняются как любые другие сохраненные процедуры.
Задачи, иллюстрируемые в этом пошаговом руководстве, включают:
Создание нового проекта Приложение Windows.
Создание сохраненной процедуры в управляемом коде.
Развертывание сохраненной процедуры в базе данных SQL Server 2005.
Создание сценария для проверки хранимой процедуры в базе данных.
Запрос данных из базы данных для подтверждения правильности выполнения сохраненной процедуры.
Обязательные компоненты
Для выполнения этого пошагового руководства потребуется следующее:
- Подключение к базе данных AdventureWorks на SQL Server 2005. Дополнительные сведения содержатся в разделе Практическое руководство. Установка образцов баз данных.
Создание проекта
Чтобы создать новый проект SQL Server:
В меню Файл создайте новый проект.
Выберите Проект SQL Server, назовите проект SQLCLRStoredProcedure и нажмите OK. Дополнительные сведения см. в разделе Практическое руководство. Создание проекта SQL Server.
Подключение к базе данных SQL Server 2005
В данном пошаговом руководстве требуется подключение к базе данных AdventureWorks на SQL Server 2005. Если подключение к базе данных AdventureWorks доступно в Обозревателе серверов, оно будет занесено в список в Диалоговое окно "Добавление ссылки на базу данных".
Примечание. |
---|
По умолчанию функция интеграции среды выполнения CLR) в Microsoft SQL Server отключена. Для использования элементов проекта SQL Server эту функцию интеграции необходимо включить. Чтобы включить интеграцию со средой CLR, используйте параметр clr enabled сохраненной процедуры sp_configure. Дополнительные сведения см. в разделе Включение интеграции со средой CLR. |
Для подключения к базе данных AdventureWorks:
Подключитесь к базе данных AdventureWorks, включенной в комплект поставки SQL Server 2005, использовав диалоговое окно Добавление подключения. Дополнительные сведения см. в разделе Добавление/изменение подключения (Microsoft SQL Server).
либо
Выберите существующее подключение к базе данных AdventureWorks в диалоговом окне Добавление ссылки на базу данных. Дополнительные сведения см. в разделе Диалоговое окно "Добавление ссылки на базу данных".
Создание сохраненной процедуры SQL Server
После создания проекта SQL Server добавьте к нему сохраненную процедуру.
Для создания сохраненной процедуры SQL Server:
В меню Проект выберите команду Добавить новый элемент.
Выберите Сохраненная процедура в Диалоговое окно "Добавление нового элемента".
Введите InsertCurrency в качестве Имени для новой сохраненной процедуры.
Нажмите кнопку Добавить.
В редакторе кодов замените код на следующий:
Примечание. Примеры 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:
Для Visual Basic и Visual C# в Обозревателе решений откройте папку TestScripts и дважды щелкните файл Test.sql.
Для Visual C++ в Обозревателе решений дважды щелкните файл Debug.sql.
Замените код в файле Test.sql (debug.sql в Visual C++) следующим кодом:
EXEC InsertCurrency 'AAA', 'Currency Test' SELECT * from Sales.Currency where CurrencyCode = 'AAA'
Нажмите клавишу 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 и объектов баз данных