我试图了解我执行的UPDATE/REPLACE
的行为,即删除一些无效数据并替换为首选数据。
UPDATE
正常执行并执行它需要做的事情,但受影响的行不是我在某些情况下预期的行(我在多个数据库上执行此操作)。
我已将下面的部分内容放在下面(其余部分基本上是在多个表中复制相同的功能)
UPDATE TBL_HISTORY
SET DETAILS = REPLACE(DETAILS,'"','Times New Roman')
WHERE HISTORYID IN
(SELECT TOP 1000 (HISTORYID) FROM TBL_HISTORY
WHERE DETAILS LIKE '%"%')
GO
我在上面的脚本中想象的是,选择包含不需要的数据字符串的TOP 1000
中的TBL_HISTORY
条记录并执行REPLACE
。
结果是有超过1000个受影响的行会更新所有行,例如返回受影响的1068行的值。
HISTORYID
是桌面上的PK。我误解了这应该如何运作?任何指导都将不胜感激。
答案 0 :(得分:1)
试试这个(它更快)。如果它仍然更新超过1000行,则是由于触发器。如果它更新1000行,则HISTORYID不是主键中的唯一列(复合主键)。
;WITH CTE as
(
SELECT top 1000
DETAILS
FROM
TBL_HISTORY
WHERE
DETAILS LIKE '%"%'
)
UPDATE CTE
SET DETAILS = REPLACE(DETAILS,'"','Times New Roman')