我想了解我正在執行的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。 –