我在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))
有人能帮我一把吗?谢谢!
干杯, 亚历
答案 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°经度)相交的点也被视为“有效”。