Приступая к работе с интеграцией со средой CLR
В этом разделе представлены общие сведения о пространстве имен и библиотек, необходимых для компиляции объектов базы данных с использованием интеграции MicrosoftSQL Server со средой CLR инфраструктуры Microsoft .NET Framework. В этом разделе также показано, как написать, скомпилировать и выполнить простую хранимую процедуру CLR на языке Microsoft Visual C#.
Необходимые пространства имен
Начиная с версии SQL Server 2005, компоненты, необходимые для разработки основных объектов базы данных CLR, устанавливаются вместе с SQL Server. Функциональность интеграции со средой CLR доступна через сборку под названием system.data.dll, которая является частью платформы .NET Framework. Эту сборку можно найти в глобальном кэше сборок (GAC), а также в каталоге .NET Framework. Ссылка на эту сборку обычно добавляется автоматически и при использовании инструментов с интерфейсом командной строки, и при работе в среде Microsoft Visual Studio, поэтому нет необходимости добавлять ее вручную.
Сборка system.data.dll содержит следующие пространства имен, необходимые для компиляции объектов базы данных среды CLR:
System.Data
System.Data.Sql
Microsoft.SqlServer.Server
System.Data.SqlTypes
Создание простой хранимой процедуры «Hello World»
Скопируйте и вставьте следующий код Visual C# или Microsoft Visual Basic в текстовом редакторе и сохраните его в файле с именем «helloworld.cs» или «helloworld.vb».
using System;using System.Data;using Microsoft.SqlServer.Server;using System.Data.SqlTypes;public class HelloWorldProc{ [Microsoft.SqlServer.Server.SqlProcedure] public static void HelloWorld(out string text) { SqlContext.Pipe.Send("Hello world!" + Environment.NewLine); text = "Hello world!"; }}
Imports SystemImports System.DataImports Microsoft.SqlServer.ServerImports System.Data.SqlTypesImports System.Runtime.InteropServices Public Class HelloWorldProc <Microsoft.SqlServer.Server.SqlProcedure> _ Public Shared Sub HelloWorld(<Out()> ByRef text as String) SqlContext.Pipe.Send("Hello world!" & Environment.NewLine) text = "Hello world!" End SubEnd Class
Эта простая программа содержит единственный статический метод общего класса. В методе используются два новых класса, SqlContext и SqlPipe, позволяющие создать управляемые объекты базы данных для вывода простого текстового сообщения. Метод также присваивает выходному параметру в качестве значения строку "Hello world!". Этот метод можно объявить как хранимую процедуру SQL Server, а затем выполнить так же, как и любую хранимую процедуру Transact-SQL.
После этого достаточно скомпилировать эту программу как библиотеку, загрузить ее в SQL Server и выполнить как хранимую процедуру.
Компилирование хранимой процедуры «Hello World»
В SQL Server распространяемые файлы Microsoft .NET Framework устанавливаются по умолчанию. Эти файлы включают csc.exe и vbc.exe, компиляторы командной строки для программ Visual C# и Visual Basic. Чтобы скомпилировать приведенный образец, измените используемую системную переменную пути и укажите в ней путь к каталогу, содержащему файл csc.exe или vbc.exe. Ниже приведен используемый по умолчанию путь установки .NET Framework.
C:\Windows\Microsoft.NET\Framework\(version)
Версия содержит номер версии установленной платформы .NET Framework. Например,
C:\Windows\Microsoft.NET\Framework\v2.0.31113
После добавления каталога .NET Framework к пути можно скомпилировать образец хранимой процедуры с созданием сборки с помощью следующей команды. Параметр /target позволяет скомпилировать код в виде сборки.
Для файлов с исходным кодом Visual C#:
csc /target:library helloworld.cs
Для файлов с исходным кодом Visual Basic:
vbc /target:library helloworld.vb
Эти команды запускают компилятор Visual C# или Visual Basic с использованием параметра /target, задающего построение библиотеки DLL.
Загрузка и выполнение хранимой процедуры «Hello World» в SQL Server
После успешной компиляции образца процедуры можно провести ее проверку в SQL Server. Для этого откройте среду SQL Server Management Studio и создайте новый запрос, соединившись с подходящей тестовой базой данных (например, к образцу базы данных AdventureWorks).
По умолчанию возможность выполнять код CLR в SQL Server отключена. Код CLR можно включить запуском системной хранимой процедуры sp_configure. Дополнительные сведения см. в разделе Включение интеграции со средой CLR.
Создание сборки требуется для того, чтобы можно было получить доступ к хранимой процедуре. В этом примере предполагается, что была создана сборка helloworld.dll в каталоге C:\. Добавьте к запросу следующую инструкцию Transact-SQL.
CREATE ASSEMBLY helloworld from 'c:\helloworld.dll' WITH PERMISSION_SET = SAFE
После создания сборки появляется возможность получить доступ к методу HelloWorld с помощью инструкции создания процедуры. Назовем создаваемую хранимую процедуру «hello»:
CREATE PROCEDURE hello@i nchar(25) OUTPUTASEXTERNAL NAME helloworld.HelloWorldProc.HelloWorld
После создания процедуры ее можно выполнить как обычную хранимую процедуру на языке Transact-SQL. Выполните следующую команду:
DECLARE @J nchar(25)EXEC hello @J outPRINT @J
Это должно привести к появлению следующего вывода в окне сообщений среды SQL Server Management Studio.
Hello world!Hello world!
Удаление образца хранимой процедуры «Hello World»
После завершения выполнения образца хранимой процедуры эту процедуру и сборку можно удалить из тестовой базы данных.
Вначале удалите процедуру с помощью команды drop procedure.
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'hello') drop procedure hello
После удаления процедуры можно удалить сборку, содержащую образец кода.
IF EXISTS (SELECT name FROM sys.assemblies WHERE name = 'helloworld') drop assembly helloworld