我的表A
包含Name nvarchar(200) UNIQUE
列。我编写了一个与NormalizeSpace
一起工作的函数(修剪+将多个空格折叠为单个空格),问题是如何编写一个UPDATE
或DELETE
Name
的脚本列依赖是规范化名称是否已存在于表中:如果不存在UPDATE
,则为DELETE
。
示例:
'a bc'
' a bc'
' d e'
结果:
'a bc'
'd e'
谢谢。
答案 0 :(得分:2)
您可以分两步完成此操作(如果您使用merge
,则为1):
-- Remove all but one copy of each value
with todelete as (
select t.*,
row_number() over (partition by dbo.NormalizeSpace(col) order by (select null)) as seqnum
from t
)
delete from todelete
where seqnum > 1;
-- Now update the values to be normalized:
update t
set col = dbo.NormalizeSpace(col)
where col <> dbo.NormalizeSpace(col);