クラスター化されていない一意のインデックスを持つテーブルがあり、このインデックスには列が4つリストされています。私はテーブル内の多数の行を更新したい。私がそうした場合、それらはもはや区別されなくなるので、インデックスのために更新が失敗します。非別の行を削除する
インデックスを無効にして、最も古い重複行を削除したいとします。ここに私のクエリはこれまでのところです:
SELECT t.itemid, t.fieldid, t.version, updated
FROM dbo.VersionedFields w
inner JOIN
(
SELECT itemid, fieldid, version, COUNT(*) AS QTY
FROM dbo.VersionedFields
GROUP BY itemid, fieldid, version
HAVING COUNT(*) > 1
) t
on w.itemid = t.itemid and w.fieldid = t.fieldid and w.version = t.version
内側の内側の選択は、彼らがそう二倍量が実際にそこにある返します右我々は、削除するレコードの数が、グループに参加します。
参加後、すべてのレコードが表示されますが、削除したいレコードはすべて最古のレコードです。
どうすればいいですか?
marc_sのソリューションは、それを行うためのエレガントな方法です。 – rorycl