我在跨SQL Server 2008中轉換爲空間類型的已知文本(WKT)的計算機上遇到不一致的行爲。它看起來好像數據存儲的方式相同,但是根據機器的不同,轉換回WKT的行爲會有所不同!SQL空間類型的WKT轉換中的跨機器不一致問題
這裏的東西我放在一起,以確定問題:
SET NOCOUNT ON;
DECLARE @TestTable TABLE (TestPoint GEOGRAPHY);
INSERT INTO @TestTable(TestPoint) VALUES (geography::STGeomFromText('POINT(-124.957140999999993 39.326679)',4326));
DECLARE @PointAsText NVARCHAR(max);
SELECT @PointAsText = TestPoint.STAsText() from @TestTable;
PRINT @PointAsText;
DECLARE @PointAsBinary BINARY(22);
SELECT @PointAsBinary = CAST(TestPoint AS BINARY(22)) from @TestTable;
print @PointAsBinary;
print @@version;
在各種機器我都可以,我看到了兩個不同的結果:
POINT(-124.95714099999999 39.326679)
0xE6100000010C1EA5129ED0A94340492A53CC413D5FC0
Microsoft SQL Server 2008 R2(SP1) - 10.50.2500.0 (X64)
2011年6月17日0時54分03秒
版權所有(C)在Windows NT 6.1微軟公司
開發版(64位)(建設7601:服務包1)
或
POINT(-124.957141 39.326679)
0xE6100000010C1EA5129ED0A94340492A53CC413D5FC0
的Microsoft SQL Server 2008 R2(RTM) - 10.50.1600.1 (英特爾X86)
2010年4月2日15時53分02秒
版權所有(c)Microsoft Corporation
Devel OPER版在Windows NT 6.0(內部版本6002:Service Pack 2中)(管理程序)
另一個測試案例表明,一個X64機2008 R2(RTM)給-124.95714099999999。所以,肯定表明x86與x64。
我至少有點熟悉缺乏浮點精度,但我不知道它是架構特定的。似乎使用SQL空間存儲涉及通過WKT轉換的數據。我沒有看到使用這些數據的更合適的策略嗎?
哦,豆!我很抱歉,我通過在SQL服務器的輸出中進行復制粘貼而癱瘓了。其中一個系統是x86,另一個是x64。當我再次訪問機器時,我會在那裏得到正確的@@版本blob。 – 2012-02-12 03:51:04
好的,我已更新問題以解決該複製+粘貼錯誤。另外,我對SELECT和PRINT進行了快速檢查,沒有區別。 – 2012-02-13 14:21:44