2012-06-21 26 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°经度)相交也被认为是“有效的”。