Sql-Server
僅更新前 1 行
我有一張表,我只需要更新每個員工的 1 個欄位。下面是範例 ddl 和我想要的輸出,應該如何編寫更新查詢以僅更新前 1 行?
Declare @Table1 Table (empName varchar(100), fieldtoupdate varchar(10)) Insert Into @Table1 (empName) VALUES ('Blue'), ('Blue'), ('Blue'), ('Blue'), ('Blue'), ('Blue'), ('Red'), ('Red'), ('Red'), ('Red'), ('Green'), ('Green'), ('Green') Select * from @Table1 empName fieldtoupdate Blue Top 1 Blue Blue Blue Blue Blue Red Top 1 Red Red Red Green Top 1 Green Green
我將在這裡使用 CTE 為您的表數據提供行號(由 empName 分區)。這樣您就可以更新 cte,這具有實際更新基表的優勢。
請記住,由於您沒有排序列,因此無法保證實際更新哪一行(您可能需要更多限制性的排序條件),但是對於基本範例,您可以使用以下內容。
DECLARE @Table1 TABLE ( empName VARCHAR(100) , fieldtoupdate VARCHAR(10) ); INSERT INTO @Table1 ( empName ) VALUES ( 'Blue' ), ( 'Blue' ), ( 'Blue' ), ( 'Blue' ), ( 'Blue' ), ( 'Blue' ), ( 'Red' ), ( 'Red' ), ( 'Red' ), ( 'Red' ), ( 'Green' ), ( 'Green' ), ( 'Green' ); WITH cteTop1Table ( RowNum, empName, fieldtoupdate ) AS ( SELECT ROW_NUMBER() OVER ( PARTITION BY empName ORDER BY empName ) AS RowNum , empName , fieldtoupdate FROM @Table1 ) UPDATE cteTop1Table SET fieldtoupdate = 'Top 1' WHERE RowNum = 1; SELECT * FROM @Table1; empName fieldtoupdate Blue Top 1 Blue NULL Blue NULL Blue NULL Blue NULL Blue NULL Red Top 1 Red NULL Red NULL Red NULL Green Top 1 Green NULL Green NULL