拡張ストアド プロシージャの作成

重要な注意事項重要

この機能は、Microsoft SQL Server の将来のバージョンで削除されます。新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションはできるだけ早く修正してください。代わりに、CLR 統合を使用してください。

拡張ストアド プロシージャは、次に示すプロトタイプを備えた関数です。

SRVRETCODE xp_extendedProcName **(**SRVPROC *);

プレフィックス xp_ は省略可能です。拡張ストアド プロシージャ名は、サーバーにインストールされたコード ページや並べ替え順に関係なく、Transact-SQL ステートメントでの参照時には常に大文字と小文字が区別されます。DLL を作成する際は、次の点に注意します。

  • エントリ ポイントが必要である場合は、DllMain 関数を記述します。

    この関数は省略可能です。ソース コードに記述されていない場合は、コンパイラにより独自のバージョン (何も実行せずに TRUE を返す) がリンクされます。DllMain 関数を記述した場合は、スレッドまたは処理が DLL にアタッチされる際、または DLL からデタッチされる際に、オペレーティング システムによってこの関数が呼び出されます。

  • DLL 外部から呼び出す関数 (拡張ストアド プロシージャ関数) はすべて、エクスポートする必要があります。

    関数をエクスポートするには、.def ファイルの EXPORTS セクションに関数名を記述します。または、ソース コード内で関数名に Microsoft コンパイラ拡張子 __declspec(dllexport) をプレフィックスとして付ける方法もあります (__declspec() の先頭にはアンダースコアが 2 つ付きます)。

拡張ストアド プロシージャ DLL を作成するには、次のファイルが必要です。

ファイル

説明

Srv.h

拡張ストアド プロシージャ API ヘッダー ファイル

Opends60.lib

Opends60.dll のインポート ライブラリ

拡張ストアド プロシージャ DLL を作成するには、ダイナミック リンク ライブラリ プロジェクトを作成します。DLL の作成に関する詳細については、開発環境のドキュメントを参照してください。

すべての拡張ストアド プロシージャ DLL で次の関数を実装およびエクスポートすることを強くお勧めします。

__declspec(dllexport) ULONG __GetXpVersion()
{
   return ODS_VERSION;
}
注意

__declspec(dllexport) は Microsoft 固有のコンパイラ拡張子です。お使いのコンパイラでこのディレクティブがサポートされない場合は、DEF ファイルの EXPORTS セクションでこの関数をエクスポートする必要があります。

SQL Server をトレース フラグ -T260 で起動したとき、またはシステム管理者の特権を持つユーザーが DBCC TRACEON (260) を実行したときに、拡張ストアド プロシージャ DLL で __GetXpVersion() がサポートされていないと、警告メッセージ ("エラー 8131: 拡張ストアド プロシージャ DLL '%' では __GetXpVersion() がエクスポートされません。") がエラー ログに出力されます。__GetXpVersion() の先頭にはアンダースコアが 2 つ付きます。

拡張ストアド プロシージャ DLL により __GetXpVersion() がエクスポートされ、この関数によって返されるバージョンがサーバーで要求されるバージョンよりも低い場合、この関数によって返されたバージョンとサーバーが必要とするバージョンを示す警告メッセージがエラー ログに出力されます。このメッセージが表示される場合は、__GetXpVersion() から無効な値が返されたか、古いバージョンの srv.h を使用してコンパイルしています。

注意

拡張ストアド プロシージャでは、Microsoft Win32 関数 SetErrorMode を呼び出さないでください。

実行時間の長い拡張ストアド プロシージャの場合は、srv_got_attention を定期的に呼び出すことにより、接続が強制的に切断された場合やバッチが中断された場合に、その拡張ストアド プロシージャが自身を終了できるようにすることをお勧めします。

拡張ストアド プロシージャ DLL をデバッグするには、SQL Server\Binn ディレクトリにその拡張ストアド プロシージャをコピーします。デバッグ セッションに実行可能ファイルを指定するには、Microsoft SQL Server 実行可能ファイルのパスとファイル名 (たとえば、C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\Sqlservr.exe) を入力します。sqlservr 引数の詳細については、「sqlservr アプリケーション」を参照してください。