2012-06-21 55 views
1

我在SQL Server 2008 R2數據庫中有一個表。它包含X,Y和Shape列,用於存儲經度和緯度的數值(38,8)和用於幾何類型的計算列。這個想法是插入X和Y時,Shape列應該自動填充正確的幾何數據。SQL Server計算出的GEOMETRY數據類型的列值

X和Y被填充。但是,我沒有成功指定Shape列。在SQL Server Management Studio中,它給了我,當我填寫以下任一碼的計算列規範的公式未能驗證公式的錯誤:

(STGeomFromText('POINT (' + CAST([x] as varchar(32)) + ' ' + CAST([y] as varchar(32)) + ')', 4283)) 

OR 

([STGeomFromText]('POINT (' + CAST([x] as varchar(32)) + ' ' + CAST([y] as varchar(32)) + ')', 4283)) 

誰能給我個忙嗎?謝謝!

乾杯,亞歷克斯

回答

1

實際上,我是那麼這個post啓發。

希望它有助於任何其他人有同樣的問題。

ALTER TABLE LOCATION 
ADD Shape AS (CONVERT(GEOMETRY, CASE WHEN x<> 0 
            AND y<> 0 
           THEN GEOMETRY::STGeomFromText('POINT(' 
                  + CONVERT(VARCHAR, x) 
                  + ' ' 
                  + CONVERT(VARCHAR, y) 
                  + ')', 4238) 
           ELSE NULL 
          END)) 
0

稍微更好的解決方案:

ALTER TABLE LOCATION 
ADD Shape AS (CONVERT(GEOMETRY, CASE WHEN x IS NOT NULL AND y IS NOT NULL 
           THEN GEOMETRY::Point(x,y,4238) 
           ELSE NULL 
          END)) 

這節省了2個不必要轉換(從int爲varchar)並且還允許點在其赤道(0°緯度)和本初子午線(0°經度)相交也被認爲是「有效的」。