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

时间:2015-07-03 15:48:40

标签: sql sql-server sql-server-2012 ssms

感谢您抽出宝贵时间阅读这篇SQL新秀的姗姗来迟的请求;非常感谢。

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

我一直在看这个,删除了所有我原来的别名,尝试重写它并尝试不同的连接。我已经搜索了类似的错误,但大多数似乎都指向使用错误的别名或错误地使用WHERE子句。我承认,在这里可能就是这种情况,但没有一个与我的情况相似。

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

  

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

当我尝试运行它时。我认为这是一件很简单的事,我做错了,因为我对此很新,但我已经筋疲力尽了我想到的一切。我承认不是不同类型联接的专家,但我使用SELECTLEFT联接获得相同的RIGHT结果。

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')

我试图修改的列的数据类型是Integer,不允许空值。如果我遗漏了任何重要信息,我很抱歉,如果有人让我知道我应该提供什么,我将非常感激。

编辑:DIS_Territories表格结构如下:

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

为了记录,我在开发 live 数据库上遇到了同样的问题。

非常感谢你还在阅读。

-Rodger

2 个答案:

答案 0 :(得分:0)

我用SQL Fiddle中的虚数据测试了你的SQL,它运行得很好。

我和留下评论的人有同样的怀疑,表中有什么东西你没有注意到吗?是列标识还是计算列? DIS_Territories是一个视图吗?

答案 1 :(得分:0)

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

我在编辑行窗口中完成了大部分编辑工作,这是我遇到错误的地方。我在新查询窗口中运行它,然后它顺利运行。不是100%确定我的服务器管理工​​作室是否有故障,但它现在似乎有效。手指交叉。