3

varcharに空間領域情報を含むcsvファイルをインポートし、変換前にvarchar(max)値に「0x」を追加してvarchar(max)値をvarbinary(max)に変換しました。それまでに、最初の「0x」を除けば、varbinary(max)列のデータは、テキストに変換されたvarchar(max)のデータとまったく同じに見えます。

次に、次のスクリプトを実行します。

select geometry::STGeomCollFromWKB(wkb, 4326) from dbo.MyTable

ここで、WKBはvarbinary(max)列です。上記のスクリプトを実行すると、次のエラーがスローされます。'既知のバイナリ(WKB)入力が無効です'

データのソースはOpenStreetMapからのものであるため、間違いなく正しいエリアデータです。したがって、私が行っていることに何か問題があるか、WKBをジオメトリデータ型に変換するためのポイントが不足していると思います。

誰か助けてもらえますか?

4

1 に答える 1

1

問題は、varcharデータをvarbinaryに変換するときに、タイプを単にバイナリに変更するのではなく、バイナリデータの実際の文字表現を変換していることだと思います。

たとえば、varchar列にデータ0xDEADBEEFがある場合、convert(varbinary(max)、'DEADBEEF')を実行すると、ASCII文字表現がバイナリに変換されます。

代わりに、16進文字列をバイナリに変換します。これは、convertのstyleパラメーターを使用して実行できます。

SELECT convert(varbinary(max)、'DEADBEEF'、2)

varcharwkbデータを実際のバイナリに変換したいことを実行する必要があります。

于 2011-07-12T18:59:39.217 に答える