感谢您抽出宝贵时间阅读这篇SQL新秀的姗姗来迟的请求;非常感谢。
我正在尝试使用我认为已经使用了数百次的代码在Server Management Studio 2012中运行更新语句,但由于某种原因,它会向我抛出错误。所以也许我没有。
我一直在看这个,删除了所有我原来的别名,尝试重写它并尝试不同的连接。我已经搜索了类似的错误,但大多数似乎都指向使用错误的别名或错误地使用WHERE
子句。我承认,在这里可能就是这种情况,但没有一个与我的情况相似。
在语句中使用SELECT
给出了我期待的结果,代码通过了语法检查,但我收到了这条消息。
列或表达式“DIS_ID”无法更新
当我尝试运行它时。我认为这是一件很简单的事,我做错了,因为我对此很新,但我已经筋疲力尽了我想到的一切。我承认不是不同类型联接的专家,但我使用SELECT
或LEFT
联接获得相同的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
答案 0 :(得分:0)
我用SQL Fiddle中的虚数据测试了你的SQL,它运行得很好。
我和留下评论的人有同样的怀疑,表中有什么东西你没有注意到吗?是列标识还是计算列? DIS_Territories是一个视图吗?
答案 1 :(得分:0)
好的,非常感谢所有看过的人。
我在编辑行窗口中完成了大部分编辑工作,这是我遇到错误的地方。我在新查询窗口中运行它,然后它顺利运行。不是100%确定我的服务器管理工作室是否有故障,但它现在似乎有效。手指交叉。