Sql 新手错误-无法更新列或表达式

Sql 新手错误-无法更新列或表达式,sql,sql-server,sql-server-2012,ssms,Sql,Sql Server,Sql Server 2012,Ssms,感谢您花时间阅读SQL新手迟来的请求;非常感谢 我试图在ServerManagementStudio 2012中运行一个update语句,使用的代码我以为已经使用了数百次,但出于某种原因,它又向我抛出了一个错误。所以也许我没有 我已经看了一段时间了,删除了我所有的原始别名,尝试重写它并尝试不同的连接。我到处都在搜索类似的错误,但大多数都指向使用了错误的别名或错误地使用了WHERE子句。我承认,这两种情况都有可能发生,但没有一种情况与我的情况类似 在语句中使用SELECT可以得到我期望的结果,代码

感谢您花时间阅读SQL新手迟来的请求;非常感谢

我试图在ServerManagementStudio 2012中运行一个update语句,使用的代码我以为已经使用了数百次,但出于某种原因,它又向我抛出了一个错误。所以也许我没有

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

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

无法更新列或表达式“DIS_ID”

当我试着运行它的时候。我认为我做错了一些简单的事情,因为我在这方面是相当新的,但我已经用尽了所有我能想到的尝试。我承认我不是不同类型联接的专家,但我使用
联接得到相同的
选择
结果

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')
我试图修改的列的数据类型是整数,不允许为null。如果我遗漏了任何重要信息,我深表歉意,如果有人能让我知道我还应该提供什么,我将非常感激

编辑:
DIS\u territions
表格结构如下:

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
为了记录在案,我的开发数据库和实时数据库都有相同的问题

如果你还在读书,非常感谢


-罗杰

我在中用我想象的数据测试了您的SQL,它运行得很好


我和那些发表评论的人都有同样的怀疑,表中有什么你没有注意到的吗?是列标识还是计算列?DIS_Territions是一个视图吗?

好的,非常感谢所有看过的人


我已经在“编辑行”窗口中完成了大部分编辑,这是我遇到错误的地方。我在新的查询窗口中运行了它,它运行得很顺利。无法100%确定故障是否出在我的Server Management Studio端,但它现在似乎可以正常工作。祝你好运。

你能提供DISU区域的模式吗?DISU ID是计算列还是标识列?。您是否正在使用Management Studio运行查询?请为您的表提供create Table语句。找到一个解决方案会很有帮助。嗨,伙计们,非常感谢你们的参与,非常感谢。哎呀,这里输入时没有换行!DIS_ID不是ID列,它是一个手动输入的列,引用此处未引用的表中的ID。Create语句如下所示在[PRIMARY]GO`Hi@thepirat000上使用[prod.data]GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE[dbo]。[Belzona_Dis_territies]([BDT_ID][int]IDENTITY(1,1)NOT NULL,[BT_ID][int]NULL,[Dis u ID][int]NULL-我正在使用Management Studio运行查询,是的。Hi JamesZ,感谢您的关注。这是我拥有的最简单的表之一,所以我不确定——我认为这一定与JOIN语句有关。DIS_Territions不是一个视图,它只是一个表,用于将我的分销商列表中的ID链接到我的地区列表。列的“\u ID”部分可能名称不正确,因为在本例中它不是标识列。@Rodger创建表中的名称是Belzona\u Dis\u Territions。你只是为了这个问题改变了它,还是有其他相关的东西?哈,是的,对不起,这是我微妙的“退出谷歌警报”编辑。史诗般的失败。我想我已经成功地做到了这一点(似乎在“新查询”选项卡上工作,但不是通过编辑“编辑行”窗口),所以希望我很快会回来确认这种或那种方式。@Rodger我记得读到“编辑行”窗口有各种错误,但不记得在哪里。我自己不使用它,所以不能确定。你说的“编辑行”和“新查询窗口”是什么意思?我使用的是SQLServer2005,所以我希望您知道如何在该平台上解释它