461

SQL Server の上位 100 レコードを更新したいと考えています。T1フィールドF1とを持つテーブルがありますF2T1には 200 件のレコードがあります。F1上位 100 レコードのフィールドを更新したいと考えています。TOP 100SQL Server に基づいて更新するにはどうすればよいですか?

4

9 に答える 9

766

UPDATE ステートメントには括弧が必要です。

update top (100) table1 set field1 = 1
于 2009-07-29T06:44:56.150 に答える
329

ORDER BYの全体的な考えがなければ、TOPあまり意味がありません。トップの概念を意味のあるものにするためには、どちらの方向が「上」でどちらが「下」であるかを一貫して定義する必要があります。

それにもかかわらず、SQL Serverはそれを許可しますが、決定論的な結果を保証するものではありません

受け入れられた回答のUPDATE TOP構文は句をサポートしていませんORDER BYが、CTEまたは派生テーブルを使用して、以下のように目的のソート順を定義することにより、ここで決定論的なセマンティクスを取得できます。

;WITH CTE AS 
( 
SELECT TOP 100 * 
FROM T1 
ORDER BY F2 
) 
UPDATE CTE SET F1='foo'
于 2012-02-11T15:41:09.000 に答える
4

TOPさらに優れているのは、インラインのテーブル値関数を使用して、更新する行 (および を介していくつ) を選択できるという事実です。あれは:

UPDATE MyTable
SET Column1=@Value1
FROM tvfSelectLatestRowOfMyTableMatchingCriteria(@Param1,@Param2,@Param3)

テーブル値関数の場合、次のように更新する行を選択するのに興味深いものがあります。

CREATE FUNCTION tvfSelectLatestRowOfMyTableMatchingCriteria
(
    @Param1 INT,
    @Param2 INT,
    @Param3 INT
)
RETURNS TABLE AS RETURN
(
    SELECT TOP(1) MyTable.*
    FROM MyTable
    JOIN MyOtherTable
      ON ...
    JOIN WhoKnowsWhatElse
      ON ...
    WHERE MyTable.SomeColumn=@Param1 AND ...
    ORDER BY MyTable.SomeDate DESC
)

...そして、(私の謙虚な意見では)選択された上位の行のみを決定論的に更新すると同時に、UPDATEステートメントの構文を簡素化する真の力があります。

于 2015-04-23T18:18:31.770 に答える