从varbinary(max)读取STGeomCollFromWKB的问题

时间:2011-05-30 08:04:22

标签: sql-server-2008 spatial varbinarymax

我已经在varchar中导入了包含空间区域信息的csv文件,然后通过在转换之前将“0x”添加到varchar(max)值,将varchar(max)值转换为varbinary(max)。到那时,除了开头的'0x'之外,varbinary(max)列中的数据看起来与转换为text的varchar(max)中的数据完全相同。

现在我运行以下脚本:

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

其中WKB是varbinary(max)列。 运行上面的脚本会引发此错误:'众所周知的二进制(WKB)输入无效'

数据来源来自Open Street Map,所以毫无疑问它们是正确的区域数据。所以我认为我正在做的事情肯定有问题,或者我错过了将WKB转换为几何数据类型的一些观点。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我假设问题是在将varchar数据转换为varbinary时,您正在转换二进制数据的实际字符表示,而不是仅仅将类型更改为二进制。

例如,如果你的varchar列中有数据0xDEADBEEF,那么就这样做 convert(varbinary(max),'DEADBEEF')将ascii字符表示转换为二进制。

你要做的是将十六进制字符串转换为二进制,这可以使用convert的style参数。

SELECT转换(varbinary(max),'DEADBEEF',2)

应该执行您想要将varchar wkb数据转换为实际二进制数据的内容。