拡張ストアド プロシージャを作成する

適用対象:SQL Server

重要

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

拡張ストアド プロシージャは、プロトタイプを含む C/C++ 関数です。

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;  
}  

Note

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

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

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

Note

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

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

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

参照

srv_got_attention (拡張ストアド プロシージャ API)