次の方法で共有


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

ms164686.note(ja-jp,SQL.90).gif重要 :
この機能は、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 関数は、次の理由で変換に失敗することがあります。

  • 要求された変換がサポートされていない。
  • 変換の結果、出力先変数で切り捨て、オーバーフロー、または有効桁数の損失が発生した。
  • 文字列を数値データ型に変換するときに構文エラーが発生した。
ms164686.security(ja-jp,SQL.90).gifセキュリティ メモ :
拡張ストアド プロシージャのソース コードを十分に確認し、コンパイルした DLL をテストしたうえで実稼働サーバーにインストールしてください。セキュリティの確認およびテストの詳細については、Microsoft の Web サイトを参照してください。

参照

関連項目

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

ヘルプおよび情報

SQL Server 2005 の参考資料の入手