2011-05-30 34 views
3

我已經在varchar中導入了包含空間區域信息的csv文件,然後通過在varchar(max)之前將varchar(max)值添加到varchar(max)轉換。屆時,除了開頭的'0x'之外,varbinary(max)列中的數據與轉換爲文本中的varchar(max)中的數據完全相同。從varbinary中讀取STGeomCollFromWKB問題(最大)

現在我運行下面的腳本:

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

其中WKB是VARBINARY(max)列。 運行上面的腳本拋出這個錯誤:著名的二進制(WKB)輸入無效

數據的來源是從開街地圖,毫無疑問,他們是正確的區域數據。所以我認爲我所做的一定是有問題的,或者我錯過了將WKB轉換爲幾何數據類型的一些觀點。

任何人都可以幫忙嗎?

回答

1

我假設問題是將varchar數據轉換爲varbinary時,您正在轉換二進制數據的實際字符表示形式,而不僅僅是將類型更改爲二進制。例如,如果在varchar列中有數據0xDEADBEEF,那麼執行 convert(varbinary(max),'DEADBEEF')會將ascii字符表示轉換爲二進制。

你想要做的是將十六進制字符串轉換爲二進制,這可能使用convert的style參數。

選擇Convert(VARBINARY(最大), 'DEADBEEF',2)

應該做你想要你的VARCHAR數據WKB轉換成真正的二進制內容。

+0

我有一個類似的問題...他們已經提供了一個表,它包含* VARBINARY(MAX)*數據類型的幾何,而不是*幾何*。我能做些什麼來將它們轉換爲任何空間數據類型?我試過[STGeomFromWKB](https://docs.microsoft.com/en-us/sql/t-sql/spatial-geometry/stgeomfromwkb-geometry-data-type),但沒有運氣...... – russellhoff 2017-06-06 14:40:15