Начало работы с интеграцией CLR
Применимо к:SQL Server
В этой статье представлен обзор пространств имен и библиотек, необходимых для компиляции объектов базы данных с помощью интеграции Microsoft SQL Server с средой CLR .NET Framework. В этой статье также показано, как писать, компилировать и запускать небольшую хранимую процедуру CLR, написанную в Microsoft Visual C# и Visual Basic.
Обязательные пространства имен
Компоненты, необходимые для разработки базовых объектов базы данных 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
Совет
Загрузка объектов базы данных CLR в Linux поддерживается, но их необходимо построить с помощью .NET Framework (интеграция СРЕДЫ CLR SQL Server не поддерживает .NET Core или .NET 5 и более поздних версий). Кроме того, сборки СРЕДЫ CLR с набором EXTERNAL_ACCESS
UNSAFE
разрешений не поддерживаются в Linux.
Запись хранимой процедуры Hello World
Скопируйте и вставьте следующий код Visual C# или 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!";
}
}
Эта программа содержит один статический метод в общедоступном классе. Этот метод использует два новых класса SqlContext и SqlPipe для создания объектов управляемой базы данных для вывода короткого текстового сообщения. Метод также назначает строку "Hello world!" в качестве значения out
параметра. Этот метод можно объявить как хранимую процедуру в SQL Server, а затем выполнить так же, как хранимую процедуру Transact-SQL.
Скомпилируйте эту программу как библиотеку, загрузите ее в SQL Server и запустите ее в качестве хранимой процедуры.
Компиляция хранимой процедуры Hello World
SQL Server устанавливает файлы распространения .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\v4.8.0
После добавления каталога .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 устанавливается OFF
по умолчанию в SQL Server. Код СРЕДЫ CLR можно включить с помощью системной sp_configure
хранимой процедуры. Дополнительные сведения см. в статье Enabling CLR Integration.
Нам потребуется создать сборку, чтобы получить доступ к хранимой процедуре. В этом примере предполагается, что вы создали сборку helloworld.dll
в каталоге C:\
. Добавьте в запрос следующую инструкцию Transact-SQL.
CREATE ASSEMBLY helloworld from 'C:\helloworld.dll' WITH PERMISSION_SET = SAFE
После создания сборки появляется возможность получить доступ к методу HelloWorld с помощью инструкции создания процедуры. Мы вызовем хранимую процедуру hello
:
CREATE PROCEDURE hello
@i nchar(25) OUTPUT
AS
EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld;
-- if the HelloWorldProc class is inside a namespace (called MyNS),
-- the last line in the create procedure statement would be
-- EXTERNAL NAME helloworld.[MyNS.HelloWorldProc].HelloWorld
После создания процедуры ее можно запустить так же, как обычную хранимую процедуру, написанную в Transact-SQL. Выполните следующую команду:
DECLARE @J NCHAR(25);
EXEC hello @J out;
PRINT @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;
Далее
Дополнительные сведения об интеграции СРЕДЫ CLR в SQL Server см. в следующих статьях:
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по