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 のデータ型変換の詳細については、「 Data 型 (拡張ストアド プロシージャ API)」を参照してください。
srv_convert 関数は、次の理由で変換に失敗することがあります。
要求された変換がサポートされていない。
変換の結果、出力先変数で切り捨て、オーバーフロー、または有効桁数の損失が発生した。
文字列を数値データ型に変換するときに構文エラーが発生した。
重要
拡張ストアド プロシージャのソース コードを十分に確認し、コンパイル済み DLL を、運用サーバーにインストールする前にテストする必要があります。 セキュリティの確認およびテストについて詳しくは、Microsoft の Web サイトをご覧ください。
参照
srv_setutype (拡張ストアド プロシージャ API)
srv_willconvert (拡張ストアド プロシージャ API)