【问题标题】:How to persist a calculated GEOMETRY or GEOGRAPHY column如何持久化计算的 GEOMETRY 或 GEOGRAPHY 列
【发布时间】:2010-09-18 20:41:07
【问题描述】:

我正在尝试在 SQL Server 2008 下创建一个包含 GEOMETRY 列及其计算变量的表。

考虑下表,其中计算列返回缓冲几何:

CREATE TABLE [dbo].[Test] (
    [Geometry]      GEOMETRY    NOT NULL,
    [Buffer]        FLOAT       NOT NULL,
    [BufferedGeometry] AS ([Geometry].STBuffer([Buffer])) PERSISTED
);

问题在于它会导致以下错误:

消息 4994,第 16 级,状态 1,第 2 行 计算列“BufferedGeometry”在 表“测试”无法持久化 因为列类型“几何”, 是非字节序的 CLR 类型。

我搜索了 BOL 和网络,但似乎无法找到解决问题的方法。我真的希望它能够被持久化,这样我就可以有效地索引它。我可以在代码中设置它,但是我可能会出现不一致的数据,因为我在某个时间点需要这两个值。

有人玩过这个并知道解决方案或解决方法吗?

更新:Microsoft 已在 SQL Server 2012 中添加此功能。

【问题讨论】:

  • 以下不起作用:ALTER TABLE dbo.Period ADD [Interval] AS (geometry::STGeomFromText( 'LINESTRING (0 ' + CAST(CAST(DATEDIFF(SECOND, '19700101', StartDate) AS BIGINT) AS VARCHAR(20)) + ', 0 ' + CAST(CAST(DATEDIFF(SECOND, '19700101', EndDate) AS BIGINT) AS VARCHAR(20)) + '''', 0)) PERSISTED ;

标签: sql-server sql-server-2008 spatial


【解决方案1】:

我猜你可以使用触发器来计算它并将其存储到 [BufferedGeometry] 字段

【讨论】:

  • 就我个人而言,我不喜欢在数据库中使用触发器,我已经很多年都不需要使用触发器了,希望以后也不需要使用触发器了。
  • 我同意 - 但有时这是唯一的方法:-)
【解决方案2】:

谁仍然有这样的问题:SQL Server 2012 现在允许它

【讨论】:

    猜你喜欢
    • 2010-12-16
    • 1970-01-01
    • 2010-10-29
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多