Microsoft SQL Server
共通言語ランタイム統合
サーチ…
データベースで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句では、アセンブリ名、このプロシージャが配置される名前空間/クラス名、およびプロシージャとして公開されるコードを含むクラス内のメソッド名を指定する必要があります。