Veritabanı tablosundaki en üst 400 satırı güncellemek istiyorum. Sözde SQL aşağıda, bunu nasıl yapabilirim?TOP 400 nasıl güncellenmeli?
UPDATE top (400) db.dbo.tbl
SET column1 = 2
WHERE column2 = 1
AND column1 is null
Veritabanı tablosundaki en üst 400 satırı güncellemek istiyorum. Sözde SQL aşağıda, bunu nasıl yapabilirim?TOP 400 nasıl güncellenmeli?
UPDATE top (400) db.dbo.tbl
SET column1 = 2
WHERE column2 = 1
AND column1 is null
Top 400'ü nasıl belirlersiniz? Herhangi bir emir olmadan aynı setin her zaman seçileceği ve dolayısıyla yanlış kayıtların güncellenebileceği bir guanantee yoktur. Üst 400, ölçüt başka türde eklemek isteyebilirsiniz HANGİ garanti etmenin bir yolu yoktur olarak
UPDATE db.dbo.tbl SET column1 = 2 WHERE
primaryID IN (
SELECT TOP (400) primarkyID FROM db.dbo.tbl
WHERE column2 = 1 AND column1 IS NULL
)
Ama bu sevmiyorum. Ve hatta alt sorguya göre bir Sipariş.
Muhtemelen böyle bir şey arıyorsanız: Kimlik tablonun birincil anahtar sütundur
update db.dbo.tbl set column1 = 2
where ID in (
select top 400 ID from db.dbo.tbl
where column2 = 1 and column1 is null --the criteria have been moved here
order by ID --order by clause recommended
)
.
Sorgulamada 'TOP' komut satırını kullanmak yerine 400 satırını kullanabilirsiniz http: // msdn .microsoft.com/tr-us/library/ms188774.aspx – pjp
SET ROWCOUNT kullanımdan kaldırılmıştır. –
@Dave: Emin misin? MSDN belgelerinde belgelenmiş olanları göremiyorum http://msdn.microsoft.com/en-us/library/ms188774.aspx – pjp
SQL Server 2008 kullanıyorsanız, "üst n" sözdizimi, silme ve güncelleştirme deyimleri üzerinde çalışacaktır. Aksi takdirde, bir alt sorguda veya türetilmiş bir tabloda birincil anahtarları tanımladığınız burada listelenen diğer yöntemler iyi çalışır. Diğerlerinin yaptığı gibi, "sipariş ver" seçeneği şiddetle önerilir veya güncellediğiniz satırlar bir sorgudan diğerine farklılık gösterebilir.
Ayrıca, SQL 2005 üzerinde çalışır, ancak parantez gerektirir: TOP (n). SQL 2005 BOL, UPDATE ifadesi, TOP() yan tümcesine bakın. – Rick
WITH q AS
(
SELECT TOP 400 *
FROM db.dbo.tb
WHERE column2 = 1
AND column1 is null
ORDER BY
column3 -- choose your order!
)
UPDATE q
SET column2 = 2
@Quassnoi, sadece merak, bir alt seçim yerine CTE kullanmanın yararı nedir? –
'jmgant':" Oracle "gibi bir alt seçimi güncelleyemezsiniz, UPDATE (SELECT TOP 400 *…) SET…' başarısız olur. Başkalarının önerdiği bir "IN" koşulu, burada fazladan bir ekstra "JOIN" ile sonuçlanır. – Quassnoi
Ayrıca, bu bir "PRIMARY KEY" yoksa veya bir "PRIMARY KEY" (SQL Server'da) bir kompozitiniz olmasa bile çalışacaktır. "IN" yükleminde birden fazla sütun kullanamazsınız) – Quassnoi
dizimini uygulayarak kullanabilirsiniz
GÜNCELLEME üst (400) tbl SET sütun1 = '2' sütun2 = '1' VE sütun1 null
Bu yayını görün http://balasingam.com/sql-server/update-top-n-record-in-sql-server/comment-page-1#comment-227
Soru nedir? – RaYell
SqlServer'ı kullandığınızı farz ediyorum. Bu doğru mu? Ayrıca, HLGEM'in cevabına dikkat edin, içinde bir siparişiniz olmadıkça, bu sorguyu her çalıştırdığınızda aynı sonuç kümesini alacağınızın garantisi yoktur. –
yeniden etiketlendi, bunu yapmak için SQL Server kullanmak zorunda kalacağınız gibi başka bir popüler DBMS TOP 400 gibi bir deyim var – tekiegreg