拡張ストアド プロシージャの作成
重要 : |
---|
この機能は、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\MSSQL.1\MSSQL\Binn\Sqlservr.exe) を入力します。sqlservr 引数の詳細については、「sqlservr アプリケーション」を参照してください。
参照
関連項目
srv_got_attention (拡張ストアド プロシージャ API)