[SQL] Update mit Subselect funktioniert nicht

ash_ol

Grünschnabel
hi leute,

ich bin immer noch dabei meine Bestandsdatenbank mit Visual C# 2010 Beta programmieren und steht vor einem weiteren Problem, bei dem mir auch keiner der Hieranwesenden oder Google helfen konnten.

und zwar habe ich eine MS Access Datenbank mit 2 Tabellen

TSMB und TLDB

In beiden Tabellen stehen fast gleiche Spalten, relevant für mein Problem sind die Spalten VOLUME_NAME und VOLTYPE.
Die TLDB-Tabelle ist die Tabelle aus der ich lese, bzw auch nur lesen kann, weils ein nicht-standardisierter ODBC-Treiber ist, der da die Verbindung zur Datenbank aufrecht erhält.

Aus jeden Fall muss ich bei einem bestimmten Event den VOLTYPE eines bestimmten Volumes aus der TLDB in die TSMB-Tabelle schreiben, nur will mir das leider nicht so gelingen.
Ich habe bereits gefühlte 100 verschiedene Update Befehle eingegeben aber nichts hat funktioniert.

Einige Versuche waren:

SQL:
UPDATE TSMB 
SET VOLTYPE 
(SELECT TLDB.VOLTYPE FROM TLDB WHERE TSMB.VOLUME_NAME = TLDB.VOLUME_NAME)

UPDATE TSMB SET VOL_TYPE = TLDB.VOLTYPE
 WHERE TSMB.VOLUME_NAME = TLDB.VOLUME_NAME

INSERT INTO TSMB (VOL_TYPE) 
SELECT TLDB.VOLTYPE FROM TLDB WHERE TSMB.VOLUME_NAME = TLDB.VOLUME_NAME

Das ganze mit Klammern ohne Klammern, mit zusätzlichen WHERE-Klauseln, aber immer krieg ich die Fehlermeldung:
Operation muss eine aktualisierbare Abfrage verwenden oder
Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.

Wie ihr sehr hab ich auch schon versucht einfach die ganze Spalte VOLTYPE aus TSMB zu updaten aber das funktioniert auch nicht.
Ich bin so gut wie fertig damit, aber das is echt ein wichtiger Wert, der auf keinen Fall in der Bestandsführung fehlen darf, da es um Magnetbänder für Datensicherungen geht. Hoffentlich könnt ihr mir vielleicht dabei helfen. Danke im Vorraus.
 
Zuletzt bearbeitet von einem Moderator:
SQL:
UPDATE TSMB 
SET VOLTYPE =
(SELECT TLDB.VOLTYPE FROM TLDB WHERE TSMB.VOLUME_NAME = TLDB.VOLUME_NAME)

... sollte auch Access machen, sofern die Joinklausel genau einen record liefern.

Ansonsten kann man auch mit INNER JOIN updaten.

SQL:
UPDATE TSMB 
 INNER JOIN TLDB 
 SET TSMB.VOLTYPE =TLDB.VOLTYPE 
WHERE TSMB.VOLUME_NAME = TLDB.VOLUME_NAME

Grüße
gore
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück