菜鸟错误 - 无法更新列或表达式

Rookie error - column or expression cannot be updated

感谢您花时间阅读这篇 SQL 菜鸟迟来的请求;非常感谢。

我正在尝试 运行 Server Management Studio 2012 中的更新语句,使用的代码我认为我已经使用了数百次,但出于某种原因,它向我返回了一个错误。所以也许我没有。

我已经看了这个一段时间了,删除了我所有的原始别名,尝试重写它并尝试不同的连接。我到处搜索类似的错误,但大多数似乎指向使用错误的别名或不正确地使用 WHERE 子句。我承认这里可能是这种情况,但 none 与我的情况相似。

在语句中使用 SELECT 得到了我期望的结果并且代码通过了语法检查,但我收到了这条消息。

column or expression 'DIS_ID' cannot be updated

当我尝试运行时。我认为我做错的事情很简单,因为我在这方面还很陌生,但我已经用尽了所有我能想到的尝试。我承认我不是不同类型联接的专家,但我使用 LEFTRIGHT 联接得到相同的 SELECT 结果。

UPDATE
    DIS_Territories
SET
    DIS_Territories.DIS_ID = '1'
FROM
    DIS_Territories
INNER JOIN
    Territories
ON 
    DIS_Territories.BT_ID = Territories.BT_ID
WHERE        (BT_State = 'Louisiana') AND (BT_County = 'Bienville') OR
                         (BT_State = 'Louisiana') AND (BT_County = 'Bossier') OR
                         (BT_State = 'Louisiana') AND (BT_County = 'Richland') OR
                         (BT_State = 'Louisiana') AND (BT_County = 'Union') OR
                         (BT_State = 'Louisiana') AND (BT_County = 'Webster') OR
                         (BT_State = 'Louisiana') AND (BT_County = 'West Carroll')

我要修改的列的数据类型是整数,不允许空值。如果我遗漏了任何重要信息,我深表歉意,如果有人让我知道我还应该提供什么,我将不胜感激。

编辑:DIS_Territories table 结构如下:

USE [live.data]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Dis_Territories](
    [BDT_ID] [int] IDENTITY(1,1) NOT NULL,
    [BT_ID] [int] NULL,
    [DIS_ID] [int] NULL
) ON [PRIMARY]

GO

郑重声明,我的 developmentlive 数据库都遇到了同样的问题。

如果您还在阅读,非常感谢。

-罗杰

我用我在 SQL Fiddle 中的假想数据测试了你的 SQL,它工作得很好。

我和评论里的人有同样的疑惑,table是不是有什么你没注意到的?列是标识列还是计算列? DIS_Territories 是视图吗?

好的,非常感谢大家看了

我在 编辑行 window 中完成了大部分编辑工作,这是我遇到错误的地方。我 运行 它在 新查询 window 中代替,它顺利进行。不能 100% 确定故障是否出在我的 Server Management Studio 端,但它现在似乎可以正常工作。手指交叉。