サーチ…


データベースでCLRを有効にする

CLRプロシージャはデフォルトでは有効になっていません。 CLRを有効にするには、次のクエリを実行する必要があります。

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO

さらに、一部のCLRモジュールで外部アクセスが必要な場合は、データベースでTRUSTWORTHYプロパティをONに設定する必要があります。

ALTER DATABASE MyDbWithClr SET TRUSTWORTHY ON

SQL CLRモジュールを含む.dllの追加

.Net言語で書かれたプロシージャ、関数、トリガ、およびタイプは、.dllファイルに格納されます。 CLRプロシージャを含む.dllファイルを作成したら、それをSQL Serverにインポートする必要があります。

CREATE ASSEMBLY MyLibrary
FROM 'C:\lib\MyStoredProcedures.dll'
    WITH PERMISSION_SET = EXTERNAL_ACCESS

PERMISSION_SETはデフォルトでSafeです。.dllのコードは外部リソース(ファイル、Webサイト、他のサーバーなど)にアクセスするためのアクセス権を必要とせず、メモリにアクセスできるネイティブコードを使用しません。

PERMISSION_SET = EXTERNAL_ACCESSは、外部リソースにアクセスするコードを含むアセンブリをマークするために使用されます。

sys.assembliesビューに現在のCLRアセンブリファイルに関する情報があります。

SELECT *
FROM sys.assemblies asms
WHERE is_user_defined = 1

SQL ServerでCLR関数を作成する

.Net関数を作成して.dllにコンパイルし、それをSQLサーバーにアセンブリとしてインポートした場合、そのアセンブリ内の関数を参照するユーザー定義関数を作成できます。

CREATE FUNCTION dbo.TextCompress(@input nvarchar(max)) 
RETURNS varbinary(max) 
AS EXTERNAL NAME MyLibrary.[Name.Space.ClassName].TextCompress 

関数とシグネチャの名前を入力パラメータで指定し、.Net関数に一致する戻り値を指定する必要があります。 AS EXTERNAL NAME句では、この関数が配置されるアセンブリ名、名前空間/クラス名、および関数として公開されるコードを含むクラス内のメソッド名を指定する必要があります。

CLR関数に関する情報は、次のクエリを使用して検索できます。

SELECT * FROM dbo.sysobjects WHERE TYPE ='FS'

SQL ServerでCLRユーザー定義型を作成する

いくつかのユーザー定義型を表す.Netクラスを作成し、それを.dllにコンパイルし、それをアセンブリとしてSQLサーバーにインポートした場合、このクラスを参照するユーザー定義関数を作成できます。

CREATE TYPE dbo.Point
EXTERNAL NAME MyLibrary.[Name.Space.Point]

T-SQLクエリで使用されるタイプの名前を指定する必要があります。 EXTERNAL NAME句では、アセンブリ名、名前空間、およびクラス名を指定する必要があります。

SQL ServerでCLRプロシージャを作成する

いくつかのクラスで.Netメソッドを作成し、.dllにコンパイルし、それをSQLサーバーにアセンブリとしてインポートした場合、そのアセンブリのメソッドを参照するユーザー定義のストアドプロシージャを作成できます。

CREATE PROCEDURE dbo.DoSomethng(@input nvarchar(max)) 
AS EXTERNAL NAME MyLibrary.[Name.Space.ClassName].DoSomething

.Netメソッドに一致する入力パラメータでプロシージャとシグネチャの名前を指定する必要があります。 AS EXTERNAL NAME句では、アセンブリ名、このプロシージャが配置される名前空間/クラス名、およびプロシージャとして公開されるコードを含むクラス内のメソッド名を指定する必要があります。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow