Sql server 2005 无法更新列值,它与聚集索引关联?
我在尝试更新列值时遇到一些问题,此列有一个关联的聚集索引 这是update语句Sql server 2005 无法更新列值,它与聚集索引关联?,sql-server-2005,Sql Server 2005,我在尝试更新列值时遇到一些问题,此列有一个关联的聚集索引 这是update语句 UPDATE dbo.VentureXRef SET RefValue = REPLICATE('0',7 - LEN(RefValue)) + RefValue WHERE LEN(RefValue) < 7 执行此update语句的正确方法是什么 提前感谢您的问题是您试图将其更新为表中已存在的值,因此唯一索引表示无法更新 正如HILGEm所提到的,这是一个重复记录问题。要识别导致重复的记录,
UPDATE dbo.VentureXRef
SET RefValue = REPLICATE('0',7 - LEN(RefValue)) + RefValue WHERE LEN(RefValue) < 7
执行此update语句的正确方法是什么
提前感谢您的问题是您试图将其更新为表中已存在的值,因此唯一索引表示无法更新 正如HILGEm所提到的,这是一个重复记录问题。要识别导致重复的记录,您可以在用表和数据库名称替换CTE后运行下面的查询
use test;
with cte as (
select '123' refvalue union all select '567' union all
select '0000123' union all
select '123456')
select refvalue from cte as a
where
len(refvalue) <7 and
exists(
select 1 from cte as b where
len(refvalue)>=7 and
REPLICATE('0',7 - LEN(a.RefValue)) + a.RefValue =b.refvalue
)
但是现在列refvalue允许在不同的记录中有相同的数据,我的意思是这些记录不是唯一的,因为这个结果集显示refvalue 038058 038058 038059 038059 038060 038060 038060 038060我运行了查询,得到了“0033520”,所以我将其更新为“033520”,并重新运行了查询,我认为应该没问题,因为现在重复值不存在,对吗?但我仍然得到相同的错误首先,查询不能报告0033520,因为查询只报告lengthrefvalue
use test;
with cte as (
select '123' refvalue union all select '567' union all
select '0000123' union all
select '123456')
select refvalue from cte as a
where
len(refvalue) <7 and
exists(
select 1 from cte as b where
len(refvalue)>=7 and
REPLICATE('0',7 - LEN(a.RefValue)) + a.RefValue =b.refvalue
)