【问题标题】:The column "GeoLocation" cannot be modified because it is either a computed column or is the result of a UNION operator无法修改列“GeoLocation”,因为它要么是计算列,要么是 UNION 运算符的结果
【发布时间】:2019-08-28 20:29:21
【问题描述】:

这是插入代码。

CREATE TRIGGER InsertedPoint
ON Points
instead of insert
AS
insert into Points(Route_Id,Title,Description,Latitude,Longitude,GeoLocation)
SELECT Route_Id,Title,Description,Latitude,Longitude,
geography::STPointFromText('POINT(' + CAST([Latitude] AS VARCHAR(20)) + ' ' + CAST([Longitude] AS VARCHAR(20)) + ')', 4326)
FROM inserted

geography 的赋值问题。当我创建触发器时,我收到错误The column "GeoLocation" cannot be modified because it is either a computed column or is the result of a UNION operator.。我该如何解决问题?

所以它是Points

【问题讨论】:

  • GeoLocation 是计算列吗?请为表Points 显示CREATE TABLE 语句好吗?
  • 是计算列
  • 如果 Points.GeoLocation 是计算列,则不要将其添加到插入中。
  • @LukStorms 但我必须插入 GeoLocation。您建议使用什么来代替 Computed 列?
  • 我想您可以查看用于该 GeoLocation 列的计算。如果需要,请更改它。但我认为你只能通过 drop & add 列来做到这一点。如果有用的话,也许可以让它持久化。

标签: sql sql-server tsql sql-insert database-trigger


【解决方案1】:

您不能在计算列中插入值。计算列的原理是你定义一个计算规则,然后你的 RDBMS 自动管理它,根据需要从其他列计算值。

没有这个列,你的触发器归结为:

CREATE TRIGGER InsertedPoint
ON Points
INSTEAD OF INSERT
AS
INSERT INTO Points(Route_Id,Title,Description,Latitude,Longitude)
SELECT Route_Id,Title,Description,Latitude,Longitude
FROM inserted

事实上,这个触发器是无操作的。除非它做了您向我们展示的其他事情,否则您最好将其删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2021-01-04
    • 2021-12-02
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多