2

いくつかの列を持つ mytable というテーブルがあります。
私がやろうとしているのは、2 つの列が一致するテーブル内の列を更新することですが、基準に一致する最初の 400 レコードに対してのみです。

例:

コラム

Name     Ref   ID    Text

ref = 555 および id = 7 の場合、Text という列を「Matched」という単語で更新します。
条件に一致するレコードが約 800 件あることは承知していますが、最初の 400 件のみを更新したいと考えてい
ます。

よろしく、ウィル。

4

4 に答える 4

8

簡単な方法の 1 つは、たとえば次のように使用ROW_NUMBERすることです。CTE

WITH CTE AS
(
   SELECT rn = ROW_NUMBER() OVER (ORDER BY ref, id),
          ref, id, text
   FROM   MyTable
   WHERE  ref = 555 AND  id = 7
)
UPDATE CTE SET text = 'Matched' 
WHERE RN <= 400

デモ

于 2013-04-04T11:36:06.617 に答える
4

a CTE を使用して、 aおよび anTOP 400を持つ行を選択できます。ref=555id=7

;with cte as
(
  select top 400 ref, id, text
  from yourtable
  where ref = 555
    and id = 7
  order by ref, id
)
update cte
set text = 'Matched';

デモで SQL Fiddle を参照してください

于 2013-04-04T11:35:55.180 に答える
1

更新するテーブルをそれ自体と結合できます。

UPDATE MyTable
        SET Text = 'Matched'
    FROM MyTable
    INNER JOIN (
        SELECT TOP 400 ID FROM MyTable WHERE ref = 555 AND ID = 7 ORDER BY ID
    ) AS InnerMyTable ON MyTable.ID = InnerMyTable.ID
于 2013-04-04T11:46:50.767 に答える