SQL Server の上位 100 レコードを更新したいと考えています。T1
フィールドF1
とを持つテーブルがありますF2
。T1
には 200 件のレコードがあります。F1
上位 100 レコードのフィールドを更新したいと考えています。TOP 100
SQL Server に基づいて更新するにはどうすればよいですか?
500200 次
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 に答える