我想了解我正在执行的UPDATE/REPLACE
的行为,即删除一些无效数据并用首选数据替换。TSQL - SELECT TOP和UPDATE影响比预期更多的行
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。我误解这应该如何工作?任何指导将不胜感激。
我可以看到这种可能的唯一方法是如果表中没有包含'SET NOCOUNT ON'的触发器。否则,如果'HISTORYID'是唯一的,则不会有超过1000行受到影响。 –
如果将上述内容转换为“SELECT”语句,会返回多少行? 'SELECT COUNT(*)FROM TBL_HISTORY WHERE HISTORY_ID IN(SELECT TOP [...]'?我倾向于HISTORYID并不是唯一的... – Shaneis
@Shaneis:HISTORYID是PK。它必须是唯一的OP。 –