GEOMETRY数据类型的SQL Server计算列值

时间:2012-06-21 05:53:43

标签: sql-server geometry

我在SQL Server 2008 R2数据库中有一个表。它包含X,Y和Shape列,用于存储经度和纬度的数字(38,8)和几何类型的计算列。想法是每当插入X和Y时,Shape列应自动填充正确的几何数据。

填充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))

有人能帮我一把吗?谢谢!

干杯, 亚历

2 个答案:

答案 0 :(得分:3)

我实际上被这个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))

答案 1 :(得分:3)

稍微好一点的解决方案:

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))

这节省了两个不必要的转换(从int到varchar),并且还允许赤道(0°纬度)和本初子午线(0°经度)相交的点也被视为“有效”。