次の方法で共有


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

ms164625.note(ja-jp,SQL.90).gif重要 :
この機能は、Microsoft SQL Server の将来のバージョンで削除されます。新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションはできるだけ早く修正してください。代わりに、CLR 統合を使用してください。

拡張ストアド プロシージャを起動する現在のクライアント セッションに含まれるトランザクションのバインド トークンを取得します。

すると拡張ストアド プロシージャは sp_bindsession を使用して、同じサーバーに対して作成した新しいセッションを既存のトランザクションにバインドします。これにより新しいセッションは、この拡張ストアド プロシージャを起動したクライアント セッションと、同じトランザクション ロック領域を共有できるようになります。

構文


int srv_getbindtoken (
SRV_PROC*
srvproc
,
char*
bindtoken
);

引数

  • srvproc
    特定のクライアント接続のためのハンドルである SRV_PROC 構造体を指すポインタです。この構造体には、アプリケーションとクライアントの間の通信やデータを管理するために、拡張ストアド プロシージャ API ライブラリで使用するすべての情報が格納されます。
  • bindtoken
    バインド トークンのコピー先バッファを指すポインタです。バインド トークンは NULL 終端文字列として表されます。指定するバッファは、255 バイト以上の長さにする必要があります。

戻り値

SUCCEED または FAIL を返します。

解説

同じトランザクション ロック領域を共有するために、拡張ストアド プロシージャのセッションを呼び出し元のクライアント セッションにバインドするには

  1. 拡張ストアド プロシージャが svr_getbindtoken を呼び出し、そのセッションの現在のトランザクションのバインド トークンを取得します。トークンは、指定された bindtoken パラメータで返されます。

  2. 拡張ストアド プロシージャが同じサーバーに対して新しいセッションを開きます。そのセッション内で、拡張ストアド プロシージャが sp_bindsession を含むバインド トークンを使用し、新しいセッションを同じトランザクションにバインドします。この拡張ストアド プロシージャは、複数のセッションを作成し、すべてのセッションを同じトランザクションにバインドすることができます。

  3. 外部ストアド プロシージャが返されたり、sp_bindsession が空文字列で呼び出されたりすると、セッションのバインドが解除されます。

    ms164625.note(ja-jp,SQL.90).gifメモ :
    共有の接続にアクセスできるバインドされたセッションは、一度に 1 つだけです。あるセッションが現在サーバーでステートメントを実行しているかサーバーからの結果を待っている場合、バインドされた同じ接続を共有している他のセッションは、現在のセッションで現在のステートメントの実行が完了するまでサーバーにアクセスできません。あるセッションが、サーバーがビジー状態のときに接続にアクセスを試みると、そのセッションは競合状態になりにエラーが返されます。その際、接続が使用中なので後でセッションを再試行する必要があることが示されます。
ms164625.security(ja-jp,SQL.90).gifセキュリティ メモ :
拡張ストアド プロシージャのソース コードを十分に確認し、コンパイルした DLL をテストしたうえで実稼働サーバーにインストールしてください。セキュリティの確認およびテストの詳細については、Microsoft の Web サイトを参照してください。

参照

その他の技術情報

sp_bindsession (Transact-SQL)
sp_getbindtoken (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手