次の方法で共有


SQL Server での確認可能なアセンブリの使用 (C++/CLI)

ダイナミックリンク ライブラリ (dll) としてパッケージ化された拡張ストアドプロシージャを使用すると、Visual C++ を使用して開発された関数を通じて、SQL Server の機能を拡張することができます。 拡張ストアド プロシージャは、Dll 内の関数として実装されます。 拡張ストアド プロシージャでは、関数だけでなく、ユーザー定義型や集計関数 (SUM や AVG など) を定義することもできます。

クライアントが拡張ストアドプロシージャを実行すると、SQL Server は拡張ストアド プロシージャに関連付けられた dll を検索し、その dll を読み込みます。 SQL Server は、要求された拡張ストアド プロシージャを呼び出し、指定されたセキュリティ コンテキストでそれを実行します。 その後、拡張ストアド プロシージャは結果セットを渡し、パラメーターをサーバーに返します。

SQL Server では、検証可能なアセンブリを SQL Server にインストールできるようにするために、Transact-SQL (T-SQL) への拡張機能が提供されています。 セキュリティ コンテキストは、SQL Server のアクセス許可セットで指定されます。セキュリティ レベルは次のとおりです。

  • 無制限モード: 自身のリスクでコードを実行します。コードは、検証可能なタイプセーフである必要はありません。

  • セーフ モード: /clr:safe を使用してコンパイルされた、検証可能なタイプセーフ コードを実行します。

重要

確認可能なプロジェクトの /clr:pure および /clr:safe の作成は、Visual Studio 2015 で非推奨になり、Visual Studio 2017 ではサポートされていません。 確認可能なコードが必要な場合は、コードを C# に変換することをお勧めします。

検証可能なアセンブリを作成して SQL Server に読み込むには、Transact-SQL コマンド CREATE ASSEMBLY および DROP ASSEMBLY を次のように使用します。

CREATE ASSEMBLY <assemblyName> FROM <'Assembly UNC Path'> WITH
  PERMISSION_SET <permissions>
DROP ASSEMBLY <assemblyName>

PERMISSION_SET コマンドで、セキュリティ コンテキストを指定します。指定できる値は、UNRESTRICTED、SAFE、または EXTENDED です。

また、CREATE FUNCTION コマンドを使用して、クラス内のメソッド名にバインドすることもできます。

CREATE FUNCTION <FunctionName>(<FunctionParams>)
RETURNS returnType
[EXTERNAL NAME <AssemblyName>:<ClassName>::<StaticMethodName>]

次の SQL スクリプト (例として、"MyScript.sql" という名前が付けられています) は、SQL Server 内にアセンブリを読み込み、クラスのメソッドを使用できるようにします。

-- Create assembly without external access
drop assembly stockNoEA
go
create assembly stockNoEA
from
'c:\stockNoEA.dll'
with permission_set safe

-- Create function on assembly with no external access
drop function GetQuoteNoEA
go
create function GetQuoteNoEA(@sym nvarchar(10))
returns real
external name stockNoEA:StockQuotes::GetQuote
go

-- To call the function
select dbo.GetQuoteNoEA('MSFT')
go

SQL スクリプトは SQL クエリ アナライザーで対話的に実行することも、sqlcmd.exe ユーティリティを使用してコマンド ラインで実行することもできます。 次のコマンド ラインは、MyServer に接続し、既定のデータベースを使用し、信頼関係接続を使用し、MyScript.sql を入力し、MyResult.txt を出力します。

sqlcmd -S MyServer -E -i myScript.sql -o myResult.txt

関連項目

クラスと構造体