我希望更新同一行中其他列的连续值的列。我正在更新的列是唯一的,并且具有这种性质,我有时会遇到重复的键错误。我希望忽略这些错误,只是更新其中一个记录而忽略其他记录。
我的查询看起来像这样:
update [Table] set Coolname = lower(Fname) + lower(Lname)
where Coolname like '%s'
and staticID=1995
and Fname is not null
and Lname is not null
现在,在Fname和Lname匹配两行的情况下,我想只更新Coolname的第一条记录。
感谢。 (MS SQL Server)
答案 0 :(得分:0)
这样的事情怎么样:
UPDATE[Table]
SET Coolname = lower(Fname) + lower(Lname)
WHERE 'PRIMARY_KEY' IN
(SELECT top 1 'PRIMARY_KEY' FROM [Table]
WHERE Coolname LIKE'%s'
AND staticID=1995
AND Fname IS NOT NULL
AND Lname IS NOT NULL );
没有SQL-Server的经验所以查询应该只是一个提示......希望我做对了。
答案 1 :(得分:0)
您应该可以使用几个CTE:
;With CoolNames as (
select *,lower(Fname) + lower(Lname) as NewCoolName from Table
where Coolname like '%s'
and staticID=1995
and Fname is not null
and Lname is not null
), Ordered as (
select *,ROW_NUMBER() OVER (PARTITION BY NewCoolName ORDER BY staticID) as rn
from Coolnames cn
)
UPDATE Ordered SET CoolName = NewCoolName where rn = 1
在哪里,因为你不关心哪一个被选中进行更新,我选择了ORDER BY staticID
- 我碰巧知道所有行都是一样的,所以这真的会让服务器任意选择一个进行更新。
如果发生了冲突,请不要在您的问题中提到两行符合更新条件的行,而是在有资格更新的行和现有行{{{已设置1}},然后添加
CoolName
进入WHERE NOT EXISTS(select * from Table t where t.CoolName = cn.CoolName)
CTE。