2016-04-06 7 views
1

Hier existiert eine MySQL-Abfrage, die in Ordnung ist, aber es funktioniert nicht auf MS-Access:Query for MS Access Datensatz einfügen, wenn nicht

INSERT INTO ProcedureCodeModifier (ProcedureCode, Description) 
SELECT * FROM 
(
    SELECT 'A1', 'Dressing for one wound' 
) AS tmp 
WHERE NOT EXISTS (SELECT ProcedureCode FROM ProcedureCodeModifier 
        WHERE ProcedureCode = 'A1') 
LIMIT 1; 

Antwort

0

entfernen LIMIT 1.

Das wäre SELECT TOP 1 ... in Access, aber es wird hier nicht benötigt.

+0

@VigneshKumar: Die Abfrage lautet 'WHERE NICHT EXISTS' welche ** in Access ** verfügbar ist. – Andre

+0

Siehe diese Antwort: http://stackoverflow.com/a/28282198/1033684 –

0

Wie bereits erwähnt here

Ich würde so etwas tun: überprüfen, um zu sehen, ob der Code in der Tabelle ProcedureCodeModifier existiert und wenn es nicht der Fall ist, dann INSERT INTO SQL ausführen. Sie müssen möglicherweise ein wenig damit spielen, abhängig davon, ob Ihr Code-Feld ein TEXT oder ein INT ist, aber das sollte Ihnen den größten Teil des Weges bringen.

Dim db as Database 
Dim rec as Recordset 
Dim sSQL as String 

Set db = CurrentDB 
Set rec = db.OpenRecordset("SELECT ProcedureCode FROM ProcedureCodeModifier WHERE ProcedureCode = 'A1'") 

Dies aktualisiert den Datensatz so können Sie eine genaue Datenanzahl rec.MoveFirst rec.MoveLast

Wenn Ihr Rekordzählimpuls 0 bekommen, dann ist der Code noch nicht in der DB, so dass Sie muss hinzugefügt werden

Setzen Sie Ihre Verbindungsvariablen immer auf Nothing, damit die Verbindung geschlossen wird!

Set db = Nothing 
Set rec = Nothing 
0

"TOP 1" -Klausel ist Muss in Hauptabfrage.

INSERT INTO ProcedureCodeModifier (ProcedureCode, Description) 
    SELECT TOP 1 
     'A1' AS ProcedureCode, 
     'Dressing for one wound' AS Description 
    FROM 
     ProcedureCodeModifier 
    WHERE 
     NOT EXISTS (SELECT TOP 1 ProcedureCode, Description 
        FROM ProcedureCodeModifier 
        WHERE ProcedureCode = 'A1'); 

Wenn ProcedureCodeModifier Tabelle leer ist oder wenn nur ein Datensatz in der Tabelle ist dann „TOP 1“ Klausel muss in Unterabfrage verzichtet werden. Ich habe Top 1-Klausel in Unterabfrage für ein Leistungsproblem verwendet.