2015-04-28 12 views
11

Güncellenecek tüm sütun adlarını listelemeye gerek kalmadan bir kaydı güncelleştirmenin bir yolu olup olmadığını bulmaya çalışıyorum. Bu yapılabilir iseHer sütunun listelenmesine gerek kalmadan bir kaydın tüm sütunları nasıl güncellenir

// the parts inside braces are what I am trying to figure out 
UPDATE Employee 
SET {all columns, without listing each of them} 
WITH {this record with id of '111' from other table} 
WHERE employee_id = '100' 

ne tür bir sorgu yazma en basit/etkin yolu olacaktır: Ben benzer bir şey kullanabilirsiniz Örneğin

, iyi olurdu?

+2

Her sütuna hangi değerin atanacağını nasıl biliyorsunuz? –

+0

Sadece yeni kayıttaki (id = 111) eski kayıttaki (id = 100) sahip olduğum her şeyin üzerine yazmaya çalışıyorum. Yani, örneğin, first_name, last_name gibi sütun adlarını listelemeden bile, bu sorgu sırayla her sütunu karşılaştıracak ve tüm sütunları farklı değerlerle yazacaktır. bu mantıklı mı? – BinaryCat

+1

Pratik bir yolu yoktur. Kod üretebilir veya silme-ekleme çifti yapabilirsiniz. Her ikisi de vakaların% 99'unda pratik değildir. – usr

cevap

12

Bu mümkün değil.

Yapmaya çalıştığınız şey SQL belirtiminin bir parçası değildir ve herhangi bir veritabanı satıcısı tarafından desteklenmez. MySQL, Postgresql, MSSQL, Oracle, Firebird, Teradata için SQL UPDATE ifadelerinin teknik özelliklerine bakın. Sadece sözdizimi altında kalanlar desteklerin her biri:

UPDATE table_reference 
    SET column1 = {expression} [, column2 = {expression}] ... 
[WHERE ...] 
+0

çalışacak. – BinaryCat

0

tabloda sütun silme ve geri sütun ekleyerek ve bunu olması gereken ne varsa bir varsayılan değer ekleyerek yapabiliriz. o zaman bu tasarruf nasıl Birleştirme kullanma hakkında tabloyu

0

yeniden inşa etmek gerekecektir? Size ınsert, Update çalıştırın ve Sil olanağı verir

https://technet.microsoft.com/en-us/library/bb522522(v=sql.105).aspx

. Diğer bir tavsiye, eğer büyük bir veri kümesini dizinlerle güncellemek istiyorsanız ve kaynak alt kümesi hedefinizden daha küçükse, ancak her iki tablo da çok büyükse, değişiklikleri önce geçici bir tabloya taşıyın. Her biri yaklaşık iki milyon satır olan iki tablo birleştirmeye çalıştım ve 20 kayıt 22 dakika sürdü. Deltaları geçici bir masaya taşıdıktan sonra saniyeler sürdü.

0

Bu durum değildir, ancak ..

sen doit edebilirsiniz:

begin tran 
delete from table where CONDITION 
insert into table select * from EqualDesingTabletoTable where CONDITION 
commit tran 

kimlik alanları ile carefoul olun.

İlgili konular