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

適用対象:yesSQL 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 アプリケーション」を参照してください。

参照

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