srv_convert (拡張ストアド プロシージャ API)
重要 : |
---|
この機能は、Microsoft 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)