2016-04-18 20 views
0

Ist es überhaupt möglich, zu bestimmen, welche Spalten in einer Update-Anweisung bedingt aktualisiert werden?Kann ich feststellen, welche Spalte ich an etwas bedingungsbedingt aktualisiere?

Ich versuche, eine Update-Abfrage zu aktualisieren, um eine von 30 Spalten pro Datensatz zu aktualisieren, aber nur wenn das vorherige Feld im Datensatz bereits ausgefüllt ist. Grundsätzlich habe ich eine Tabelle mit Projekten und eine Tabelle mit Spendern. Jedes Projekt hat 1 bis 4 Spender, aber jeder Spender hat zwischen 1 und 25 Projekte finanziert. Die Projektseite ist mit den Spendern ausgefüllt, daher versuche ich, die Spender automatisch mit den von ihnen finanzierten Projekten auszufüllen. Bis jetzt ist mein Versuch wie folgt. (Die Abfrage von dem ich Aktualisierung AM ist eine Abfrage, die Felder auswählt, wenn der Spender aus dem Spendertabelle gleich Spender 1 oder Donator 2 oder Donator 3 oder Donator 4 von der Projekttabelle):

UPDATE [Appropriate Query] 
SET (iif([Project Funded 1 title] is null OR [project funded 1 title] <> 
[Project title], [project funded 1 title], iif([project funded 2 title] 
is null OR [project funded 1 title] <> [Project title], [project funded 2 title])) 
= Iif([Project title] is null, [cc number], [project title]) 

(i dieses haben Nested Loop erste SET-Teil für 30 Spalten geschlungen der zweite Teil meines Codes ist, weil einige der "Projekttitel" Felder leer sind, aber ich brauche eine Kennung in das Feld)

Bisher habe ich nur Fehlermeldungen erhalten. Ist es überhaupt möglich, zu bestimmen, welche Spalten wie oben dargestellt bedingt durch ihren Inhalt aktualisiert werden? Ich weiß, dass die iif-Anweisung hässlich ist, aber JET SQL (die Sprache des Zugriffs) erlaubt keine Fallanweisungen, von dem, was ich verstehe.

Vielen Dank, und vergib meine Unwissenheit.

Antwort

0

Sie können nicht, außer durch dynamisches Erstellen der SQL mit VBA.

ABER sollten Sie das nicht tun (zumindest nicht hier), stattdessen sollten Sie Ihren Tischentwurf korrigieren.

Sie haben eine Viele-zu-Viele-Beziehung zwischen Projekten und Spendern, daher sollten Sie eine Junction table zwischen ihnen anstelle mehrerer Spalten in den Basistabellen haben.

bearbeiten

mit einer Reihe von INSERT-Abfragen Sicher, z.B. wenn Sie die Projekte Tabelle ausgefüllt haben:

INSERT INTO junction (project_id, donor_id) 
SELECT id, donor1 FROM project WHERE donor1 IS NOT NULL; 

INSERT INTO junction (project_id, donor_id) 
SELECT id, donor2 FROM project WHERE donor2 IS NOT NULL; 

usw.

+0

Vielen Dank, das ist genau die Informationen, die ich gesucht habe. – Benjamin

+0

Eine Follow-up-Frage ... Ich habe bereits viele Felder mit Daten gefüllt. Gibt es eine Möglichkeit, die Junction-Tabelle automatisch mit den ID-Nummern zu füllen? – Benjamin

+0

@ Benjamin: siehe bearbeiten. – Andre