2011-03-14 28 views
6

değilse, MS Access 2000 için bir SQL sorgusu yazmalıyım, böylece bir satır mevcutsa güncellenir, ancak eklenmezse eklenmelidir. SQL erişim sorgusu - Varsa, güncelleştirme satırı

yani

satır varsa

...

UPDATE Table1 SET (...) WHERE Column1='SomeValue' 

o yoksa ...

INSERT INTO Table1 VALUES (...) 

bu bir sorguda yapılabilir mi?

(MySQL çalışır AÇIK DUPLICATE KEY UPDATE method. Burada çalışmak görünmüyor)

+2

basit bir cevabı Ancak sayılı olduğunu, böyle bir şey yapmak için VBA kullanarak bir yordam yazabilirsiniz. – shahkalpesh

+0

ne hakkında [Birleştirme Bildirimi] [1]? [1]: http://technet.microsoft.com/en-us/library/bb510625.aspx – mcha

+0

Mcha: "MERGE" Access ile çalışıyor mu? –

cevap

7

Değil bir sorguda ancak birden fazla satır için iki sorgu yapabilirdi.

UPDATE Table1 
    SET (...) 
    WHERE Column1 = 'SomeValue' 
; 

INSERT INTO Table1 (...) 
    (SELECT ... 
     FROM ... 
     WHERE 'SomeValue' NOT IN (SELECT Column1 
             FROM Table1) 
    ) 
; 

:

MySQL

, eşdeğer zaten iki sorgu ile yazılabilir :)

INSERT INTO Table1 (...) 
    VALUES(...) 
ON DUPLICATE KEY 
    UPDATE column=column+1 
; 

veya

INSERT INTO Table1 (...) 
    (SELECT ... 
     FROM ... 
    ) 
ON DUPLICATE KEY 
    UPDATE column=column+1 
; 

ikinci form bildiğimiz gibi (bir Siparişi tersine çevirebilir ve önce yeni satırları ekleyebilir ve ardından verilerinizle daha iyi uyuşuyorsa tüm satırları güncelleyebilirsiniz.

* IN ve NOT IN subqueries muhtemelen denk JOIN ve LEFT JOIN with check for NOT NULL formlarına dönüştürülebilir hususu not edilmelidir.

-1

Bu Erişme doğrudan geçerli değildir [EDIT: David-W-Fenton bu erişimde mümkün olmadığını iddia], ancak şeyiyle (vaka birisi bu okuma Erişim ötesinde bir ilgi):

Microsoft SQL Server'da ikiden çok bir dizin denetimi yapmak zorunda olduğundan daha verimli olması gereken bir yaklaşım kullanarak başarılı oldum. İşte benim şimdiki projesinden bir örnek:

UPDATE ActivityRelationships 
SET [Count] = ([Count] + 1) 
WHERE [email protected] AND [email protected] 
IF @@ROWCOUNT=0 
    INSERT INTO ActivityRelationships ([ActivityBeforeId], [ActivityAfterId], [Count]) 
    VALUES (@activityBeforeId, @activityAfterId, 1) 
+3

Access'te yapılamaz. Belirli bir soru için işe yaramayan bir cevap göndermek için -1. –

+0

Bu soruyu kesin bir çözüm olarak önermiyordum, sadece mümkün olup olmadığına bakmaya değer bir şey. –

+1

"Erişim Doğrudan Erişim'e uygulanmaz" ile ilgili bir soruya erişiminiz reddedildiğiniz ipucunuz olmalıydı. –