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

適用対象:SQL Server

重要

この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代わりに CLR 統合を使用してください。

データを別のデータ型に変換します。

構文

  
int srv_convert (  
SRV_PROC *  
srvproc  
,  
int  
srctype  
,  
void *  
src  
,  
DBINT  
srclen  
,  
int  
desttype  
,  
void *  
  dest  
,  
DBINT  
destlen  
);  

引数

srvproc
特定のクライアント接続のためのハンドルである SRV_PROC 構造体を指すポインターです。 この構造体には、アプリケーションとクライアントの間の通信やデータを管理するために、拡張ストアド プロシージャ API で使用するすべての制御情報が格納されます。 srvproc ハンドルが指定されている場合、エラーが発生すると、拡張ストアド プロシージャ API エラー ハンドラー関数に渡されます。

srctype
変換元データのデータ型を指定します。 このパラメーターには、拡張ストアド プロシージャ API の任意のデータ型を使用できます。

src
変換元データへのポインターです。 このパラメーターには、拡張ストアド プロシージャ API の任意のデータ型を使用できます。

srclen
変換元データの長さをバイト数で指定します。 srclen が 0 である場合、srv_convert は出力先変数に NULL を格納します。 0 以外の場合、固定長のデータ型ではこのパラメーターが無視され、変換元データが NULL であると見なされます。 SRVCHAR データ型のデータの場合、長さが -1 であれば、文字列が NULL 終端であることを示します。

desttype
変換先のデータ型を指定します。 このパラメーターには、拡張ストアド プロシージャ API の任意のデータ型を使用できます。

dest
変換したデータを受け取る出力先変数を指すポインターです。 このポインターが NULL である場合、ユーザーが指定したエラー ハンドラーがあれば srv_convert はそのエラー ハンドラーを呼び出し、-1 を返します。

desttype が SRVDECIMAL または SRVNUMERIC である場合、dest パラメーターは DBNUMERIC 構造体または DBDECIMAL 構造体を指すポインターである必要があります。その際、構造体の有効桁数と小数点以下桁数のフィールドには、必要な値を設定しておきます。 既定の有効桁数を指定するには DEFAULTPRECISION を、既定の小数点以下桁数を指定するには DEFAULTSCALE を使用できます。

destlen
出力先変数の長さをバイト数で指定します。 固定長データ型の場合、このパラメーターは無視されます。 出力先変数が SRVCHAR 型である場合、destlen の値を出力先バッファー領域全体の長さにする必要があります。 SRVCHAR 型または SRVBINARY 型の出力先変数の長さが -1 であれば、十分な領域があることを示します。 出力先変数が srvchar 型である場合、長さを -1 にすると文字列が NULL 終端になります。

返品

データ型の変換が成功した場合は、変換後のデータの長さをバイト数で返します。 srv_convert がサポートしていないデータ型への変換要求を受けた場合は、開発者の定義したエラー ハンドラーがあればそれを呼び出し、グローバル エラー番号を設定して -1 を返します。

解説

srv_willconvert 関数は、特定の変換が可能かどうかを判断する関数です。

概数データ型 SRVFLT4 または SRVFLT8 への変換では、有効桁数の一部が失われることがあります。 概数データ型 SRVFLT4 または SRVFLT8 から SRVCHAR または SRVTEXT への変換でも有効桁数の一部が失われることがあります。

SRVFLTx、SRVINTx、SRVMONEY、SRVMONEY4、SRVDECIMAL、SRVNUMERIC のいずれかに変換した結果、数値が出力先の最大値より大きい場合はオーバーフロー、最小値より小さい場合はアンダーフローになることがあります。 SRVCHAR または SRVTEXT への変換時にオーバーフローが発生した場合、変換後の値の最初の文字はエラーを示すアスタリスク (*) なります。

SRVCHAR を SRVBINARY に変換する場合、文字列に先頭ビット 0 が含まれているかどうかに関係なく、srv_convert は SRVCHAR を 16 進数として解釈します。 SRVBINARY から SRVCHAR に変換する場合、srv_convert は先頭ビット 0 のない 16 進数文字列を作成します。 それ以外の、SRVBINARY データ型からの変換または SRVBINARY データ型への変換ではビット コピーを忠実に行います。

場合によっては、同じデータ型への変換が役立つことがあります。 たとえば、destlen を -1 にして SRVCHAR から SRVCHAR に変換すると、文字列に NULL 終端が追加されます。

データ型と拡張ストア プロシージャ API のデータ型変換の詳細については、「データ型 (拡張ストアド プロシージャ API)」を参照してください

srv_convert 関数は、次の理由で変換に失敗することがあります。

  • 要求された変換がサポートされていない。

  • 変換の結果、出力先変数で切り捨て、オーバーフロー、または有効桁数の損失が発生した。

  • 文字列を数値データ型に変換するときに構文エラーが発生した。

重要

拡張ストアド プロシージャのソース コードを十分に確認し、コンパイル済み DLL を、運用サーバーにインストールする前にテストする必要があります。 セキュリティの確認およびテストについて詳しくは、Microsoft の Web サイトをご覧ください。

参照

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