2012-06-12 22 views
9

en iyi 100 satırları güncelleyebilirsiniz:nasıl standart SQL Bunu biliyorum DB2

update top (100) table1 set field1 = 1 

(referans: how can I Update top 100 records in sql server)

Ama bu DB2 izin verilmez. DB2'de aynı sonucu nasıl elde edeceğimi öneren var mı? Teşekkürler!

+1

'TOP x' SQL standardında değil, (muhtemelen ve Sybase) MS SQL Server özgü bir uzantısıdır. ['FETCH FIRST x ROWS'] (http://en.wikipedia.org/wiki/Select_ (SQL) #FETCH_FIRST_clause) SQL'de tanıtıldı: 2008 – bhamby

cevap

16

Bu

İlk beklediğiniz sonuçları ... alamayabilirsiniz ancak hep SQL doğal sırasız olduğunu hatırlamak, dooable olduğunu. Bu, ne demek istediğinizi açıkça belirtmediğiniz sürece, "üst" satır olarak yok demektir. Aksi takdirde, sonuçlarınız 'rastgele' (sortof). Ne olursa olsun

, bu masanın üzerinde benzersiz bir anahtar çeşit sahip olduğu varsayılan, dooable geçerli:

UPDATE table1 SET field1 = 1 
WHERE table1Key IN (SELECT table1Key 
        FROM table1 
        WHERE field1 <> 1 
        ORDER BY field1 
        FETCH FIRST 100 ROWS ONLY) 

Neden yalnızca bir seferde 100 satırdan güncellemek istiyorsunuz? Ne tür bir problemi çözmeye çalışıyorsun?

+1

Maalesef, eğlenceyi ekleyen satırlarda benzersiz bir tanımlayıcı yok. ama sağladığınız örneğe göre benzer bir çözüm buldum, teşekkürler. 100 bir zor sınır değil, on binlerce kayıt varsa tüm masayı tutmanın bir yolu. Esasen, bir JEE sunucusunda, bu tablodaki kayıtları denetleyen, bir seferde 100 tane yakalayan ve bunları başka bir konuma geçiren bir dizi örneği çalıştıran zamanlanmış bir işlem var. İlk 100'i bir parti kimliği ile işaretlemek, seçmek, döngüden geçirmek ve işlem yapmak, daha sonra toplu kimlik numarası –

+1

ile silmek istiyorum. Bunu biraz daha basit bir şekilde yapabileceğimi fark ettim: 'UPDATE (SELECT table1Key FROM table1 WHERE field1 <> 1 ORDER BY field1 İLK 100 SADECE SATIN ALIN) SET field1 = 1' –

2

RRN (yalnızca güncelleme sayısını sınırlandırmakla ilgileniyorsanız) kullanabilir misiniz? örneğin

:

update mytable a set a.field = 'foo' where RRN(a) < 200 
+0

Bunun gibi bir işlem için değil. RRN(), uçucu olmayan bir dosya için tamam, ancak bu dosya satır ekleniyor ve siliniyor. Varsayılan olarak, SQL tabloları REUSEDLT (* YES) olacaktır, bu nedenle satırlar önceden silinmiş satırların yuvalarına eklenebilir. Yanlış satırları bir parti numarasıyla güncellemek çok kolay olurdu ya da daha da kötüsü RRN() = 1'e eklenmiş bir satırı silebiliriz. – user2338816