私が実行しているUPDATE/REPLACE
の動作を理解しようとしています。無効なデータを削除し、優先するデータに置き換えています。TSQL - 予想より多くの行に影響を及ぼす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です。どうやってこれがうまくいくのか誤解していますか?どんな指導も高く評価されます。
唯一の方法です。それ以外の場合は、 'HISTORYID'が一意である場合、影響を受ける可能性のある行は1000以上ありません。 –
上記を 'SELECT'文にすると返される行数はいくつですか?私はHISTORYIDがユニークではないと思っています... – Shaneis
@Shaneis:HISTORYIDはPKです.OPごとに一意でなければなりません。 –