2009-07-29 1018 views
303

我想更新SQL Server中前100條記錄。我有一個表T1與領域F1F2T1有200條記錄。我想更新前100條記錄中的F1字段。我如何根據SQL Server中的TOP 100進行更新?如何更新sql server中的前100條記錄

+0

此鏈接可能會幫助你http://www.codefari.com/2015/10/how-can-i-update-top-10-records-in-sql.html – Singh 2016-02-16 04:59:52

回答

522

注意,需要的括號UPDATE語句:

update top (100) table1 set field1 = 1 
+16

任何想法如何使用`訂單通過`以及? – 2013-02-27 18:30:47

+4

@JoePhilllips使用Martin Smith的答案按 – jjxtra 2014-09-11 19:10:50

+0

排序,但這些不是前100條記錄,而是100條任意選擇的記錄。前100名將包括一些排序記錄的命令。 – 2017-09-03 01:47:20

9
update tb set f1=1 where id in (select top 100 id from tb where f1=0) 
242

如果沒有ORDER BYTOP的整體思路並沒有太大的意義。你需要有一個一致的定義,哪個方向是「向上」,哪個方向是「向下」,頂層的概念是有意義的。

儘管如此SQL Server允許它,但是doesn't guarantee a deterministic result

UPDATE TOP語法接受的答案不支持ORDER BY條款,但它是可以通過使用CTE或派生表定義爲低於所需的排序順序在這裏得到確定性的語義。

;WITH CTE AS 
( 
SELECT TOP 100 * 
FROM T1 
ORDER BY F2 
) 
UPDATE CTE SET F1='foo' 
12

對於那些喜歡我還是堅持了SQL Server 2000中,SET ROWCOUNT {number};可以UPDATE查詢

SET ROWCOUNT 100; 
UPDATE Table SET ..; 
SET ROWCOUNT 0; 

之前使用將限制更新到100行

它至少已過時自SQL 2005以來,但從SQL 2012開始,它仍然有效。 編輯:它在SQL 2014中被殺害。使用SET ROWCOUNT不會影響SQL Server 2014及更高版本中的DELETE,INSERT和UPDATE語句。

3

更酷的是,您可以使用內聯表值函數來選擇要更新的行(以及有多少個通過TOP)的行。那就是:

UPDATE MyTable 
SET [email protected] 
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 [email protected] AND ... 
    ORDER BY MyTable.SomeDate DESC 
) 

...,有謊言(愚見)的真正力量只確定性地更新頂部選定的行,同時簡化語句的語法。

相關問題