【问题标题】:SQL Server Computed Column value for GEOMETRY data typeGEOMETRY 数据类型的 SQL Server 计算列值
【发布时间】:2014-06-16 14:49:43
【问题描述】:

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

谁能帮帮我?谢谢!

干杯, 亚历克斯

【问题讨论】:

    标签: sql-server geometry


    【解决方案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))
    

    【讨论】:

      【解决方案2】:

      稍微好一点的解决方案:

      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° 经度)相交的点也被视为“有效”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-23
        • 1970-01-01
        • 2015-06-25
        • 2012-01-14
        • 2023-04-04
        • 1970-01-01
        • 2011-05-04
        相关资源
        最近更新 更多