拡張ストアドプロシージャの作成
適用対象:SQL Server (サポートされているすべてのバージョン)
重要
この機能は、Microsoft SQL Server の将来のバージョンで削除されます。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代わりに CLR Integration を使用してください。
拡張ストアドプロシージャは、プロトタイプを持つ C/c + + 関数です。
SRVRETCODE xp_extendedProcName * * (* * srvproc *);
プレフィックス xp_ は省略可能です。 拡張ストアドプロシージャ名は、サーバーにインストールされているコードページ/並べ替え順序に関係なく、SQL 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
SetErrorMode (Microsoft Win32 関数) は、拡張ストアドプロシージャでは呼び出さないでください。
実行時間の長い拡張ストアド プロシージャの場合は、srv_got_attention を定期的に呼び出すことにより、接続が強制的に切断された場合やバッチが中断された場合に、その拡張ストアド プロシージャが自身を終了できるようにすることをお勧めします。
拡張ストアドプロシージャ DLL をデバッグするには、SQL Server \Binn ディレクトリにコピーします。 デバッグセッションの実行可能ファイルを指定するには、Microsoft SQL Server 実行可能ファイルのパスとファイル名を入力します (たとえば、C:\Program の SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\Sqlservr.exe)。 Sqlservr.exe 引数の詳細については、「 Sqlservr.exe アプリケーション」を参照してください。