拡張ストアド プロシージャの作成
重要 |
---|
この機能は、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 アプリケーション」を参照してください。