Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 无法更新列值,它与聚集索引关联?_Sql Server 2005 - Fatal编程技术网

Sql server 2005 无法更新列值,它与聚集索引关联?

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语句

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
)