SQL Server のさまざまなインストールを見ると、返される 4 番目の列が でxp_msver
ある場合もあればnvarchar
、 である場合もありますvarchar
。SQL Server 2000 から 2012 年までの一部のコピーは varchar を返し、他のコピーは nvarchar を返すため、これは SQL Server のバージョンとは関係がないようです。これは、Windows のバージョンやビット数にも関係していないようです。
なぜこれが起こるのですか?出力を構成する方法、または事前に使用されるデータ型を知る方法はありますか?
編集: Visual FoxPro を使用してこの情報を照会していますが、これにはユニコードを扱う多くの問題があります。そのため、データを処理して ANSI/1 バイト エンコーディングに変換する方法を知る必要があります (まだ変換されていない場合)。ANSI/1 バイトの制限は理解していますが、ここではデータの損失は許容できると見なされます。
sqlexec(connhandle, "exec xp_msver")
ADO が図に含まれている場合、RecordSetsで継承されたデータ型プロパティを使用するだけですが、FoxPro と独自のカーソル機能に限定されます。FoxPro に取り込まれると、Character_Value
列 (ここで問題となっている 4 番目の列) はMEMOデータ型と見なされます。これは、255 文字を超える可能性のある文字列 (何らかの種類またはバイナリ データでさえも) を表す手の込んだ方法です。これは、長い文字列や、FoxPro が処理できないデータ型のキャッチオールであり、この場合は非常に役に立ちません。
FoxPro から明示的に使用するMicrosoft KB 記事がありxp_msver
、SQL Server 7.0 以降ではストアド プロシージャに対して常に Unicode が返されると記載されていますが、常にそうであるとは限りません。また、xp_msver
これはストアド プロシージャsp_help
でsp_columns
あるため、ここでは役に立ちません。
正直なところ、私は を使用したいと思いSERVERPROPERTY()
ますが、要件である SQL Server 7.0 ではサポートされていません。SQL Server のバージョンごとに異なるクエリを使用して、コードを過度に複雑にしないことをお勧めします。また、@@version
テキストを解析する必要があり、バグが発生しやすく、必要なすべての情報が提供されないため、使用は適切なオプションではありません。