菜鸟错误 - 无法更新列或表达式
Rookie error - column or expression cannot be updated
感谢您花时间阅读这篇 SQL 菜鸟迟来的请求;非常感谢。
我正在尝试 运行 Server Management Studio 2012 中的更新语句,使用的代码我认为我已经使用了数百次,但出于某种原因,它向我返回了一个错误。所以也许我没有。
我已经看了这个一段时间了,删除了我所有的原始别名,尝试重写它并尝试不同的连接。我到处搜索类似的错误,但大多数似乎指向使用错误的别名或不正确地使用 WHERE
子句。我承认这里可能是这种情况,但 none 与我的情况相似。
在语句中使用 SELECT
得到了我期望的结果并且代码通过了语法检查,但我收到了这条消息。
column or expression 'DIS_ID' cannot be updated
当我尝试运行时。我认为我做错的事情很简单,因为我在这方面还很陌生,但我已经用尽了所有我能想到的尝试。我承认我不是不同类型联接的专家,但我使用 LEFT
或 RIGHT
联接得到相同的 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
郑重声明,我的 development 和 live 数据库都遇到了同样的问题。
如果您还在阅读,非常感谢。
-罗杰
我用我在 SQL Fiddle 中的假想数据测试了你的 SQL,它工作得很好。
我和评论里的人有同样的疑惑,table是不是有什么你没注意到的?列是标识列还是计算列? DIS_Territories 是视图吗?
好的,非常感谢大家看了
我在 编辑行 window 中完成了大部分编辑工作,这是我遇到错误的地方。我 运行 它在 新查询 window 中代替,它顺利进行。不能 100% 确定故障是否出在我的 Server Management Studio 端,但它现在似乎可以正常工作。手指交叉。
感谢您花时间阅读这篇 SQL 菜鸟迟来的请求;非常感谢。
我正在尝试 运行 Server Management Studio 2012 中的更新语句,使用的代码我认为我已经使用了数百次,但出于某种原因,它向我返回了一个错误。所以也许我没有。
我已经看了这个一段时间了,删除了我所有的原始别名,尝试重写它并尝试不同的连接。我到处搜索类似的错误,但大多数似乎指向使用错误的别名或不正确地使用 WHERE
子句。我承认这里可能是这种情况,但 none 与我的情况相似。
在语句中使用 SELECT
得到了我期望的结果并且代码通过了语法检查,但我收到了这条消息。
column or expression 'DIS_ID' cannot be updated
当我尝试运行时。我认为我做错的事情很简单,因为我在这方面还很陌生,但我已经用尽了所有我能想到的尝试。我承认我不是不同类型联接的专家,但我使用 LEFT
或 RIGHT
联接得到相同的 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
郑重声明,我的 development 和 live 数据库都遇到了同样的问题。
如果您还在阅读,非常感谢。
-罗杰
我用我在 SQL Fiddle 中的假想数据测试了你的 SQL,它工作得很好。
我和评论里的人有同样的疑惑,table是不是有什么你没注意到的?列是标识列还是计算列? DIS_Territories 是视图吗?
好的,非常感谢大家看了
我在 编辑行 window 中完成了大部分编辑工作,这是我遇到错误的地方。我 运行 它在 新查询 window 中代替,它顺利进行。不能 100% 确定故障是否出在我的 Server Management Studio 端,但它现在似乎可以正常工作。手指交叉。