ich habe folgendes Problem. Ich habe eine Tabelle mit Empfänger, diese haben alle ein Feld mit einer Postleitzahl. Nun habe ich eine SQL-Anweisung geschrieben die alle Bundesläner nach der Postleitzahl einträgt.
UPDATE empfaenger
SET bundesland = ‚Baden-Württemberg‘
WHERE Land = ‚D‘
and (Bundesland ‚Baden-Württemberg‘ or bundesland is null)
and ( plz BETWEEN ‚68000‘ AND ‚68309‘) OR
(plz BETWEEN ‚68520‘ AND ‚68549‘) OR
(plz BETWEEN ‚68520‘ AND ‚68549‘) OR
(plz BETWEEN ‚68520‘ AND ‚68549‘) OR
(plz BETWEEN ‚68700‘ AND ‚69234‘) OR
(plz BETWEEN ‚69240‘ AND ‚69429‘) OR
(plz BETWEEN ‚69435‘ AND ‚69469‘) OR
(plz BETWEEN ‚69489‘ AND ‚69502‘) OR
(plz BETWEEN ‚69510‘ AND ‚69514‘) OR
(plz BETWEEN ‚70000‘ AND ‚76709‘) OR
(plz BETWEEN ‚77600‘ AND ‚79879‘) OR
(plz BETWEEN ‚88000‘ AND ‚88099‘) OR
(plz BETWEEN ‚88180‘ AND ‚89198‘) OR
(plz BETWEEN ‚89300‘ AND ‚89619‘) OR
(plz BETWEEN ‚97860‘ AND ‚97999‘) OR
(plz = ‚78266‘))
UPDATE empfaenger
SET bundesland = ‚Bayern‘
WHERE
.
.
und das mit allen 16 Bundesländern.
Das Problem ist, dass anstatt 192000 Empfängern nur ca. 15000 geändert werden. Habe das SQL-Statement unter den Query-Analyzer ausprobiert da ich es später dann in einem Formular verwenden möchte. Dort kann dann der Kunde je nach belieben, ob nun neue Empfänger da sind, diese auf das Bundesland updaten.
Hat jemand eine Idee warum ich nicht alle Empfänger erwische bzw. der SQL-Server???
Für mich sieht es aus, als hättest du eine Klammer vergessen (man hat immer eine zuviel oder zuwenig ), und vielleicht auch ein Semikolon am Ende des Updates - aber bei nicht-Oracle-DBs kann das ja anders sein.
Ich vermute mal stark, dass die Sammlung von Intervallen, die du da hast nicht all PLZ abdeckt. Das lässt sich aber nur mit allen 16 Statements zusammen klären, welche da fehlen.
Also: alle Bundesländer auf null setzen; prozedure laufen lassen. Schauen wo die Lücken sind voila.
Oder noch besser: eine Tabelle mit allen PLZ und den zugehörigen Bundeslädern anlegen (aber nicht als Text sondern als ID) und mit Hilfe dieser Tabelle updaten. Sollte wesentlich schneller gehen und ist einfacher zu warten.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
ich habe folgendes Problem. Ich habe eine Tabelle mit
Empfänger, diese haben alle ein Feld mit einer Postleitzahl.
Nun habe ich eine SQL-Anweisung geschrieben die alle
Bundesläner nach der Postleitzahl einträgt.
UPDATE empfaenger
SET bundesland = ‚Baden-Württemberg‘
WHERE Land = ‚D‘
and (Bundesland ‚Baden-Württemberg‘ or bundesland is
null)
and ( plz BETWEEN ‚68000‘ AND ‚68309‘) OR
(plz BETWEEN ‚68520‘ AND ‚68549‘) OR
(plz BETWEEN ‚68520‘ AND ‚68549‘) OR
(plz BETWEEN ‚68520‘ AND ‚68549‘) OR
(plz BETWEEN ‚68700‘ AND ‚69234‘) OR
(plz BETWEEN ‚69240‘ AND ‚69429‘) OR
(plz BETWEEN ‚69435‘ AND ‚69469‘) OR
(plz BETWEEN ‚69489‘ AND ‚69502‘) OR
(plz BETWEEN ‚69510‘ AND ‚69514‘) OR
(plz BETWEEN ‚70000‘ AND ‚76709‘) OR
(plz BETWEEN ‚77600‘ AND ‚79879‘) OR
(plz BETWEEN ‚88000‘ AND ‚88099‘) OR
(plz BETWEEN ‚88180‘ AND ‚89198‘) OR
(plz BETWEEN ‚89300‘ AND ‚89619‘) OR
(plz BETWEEN ‚97860‘ AND ‚97999‘) OR
(plz = ‚78266‘))
Das Problem ist, dass anstatt 192000 Empfängern nur ca. 15000
geändert werden. Habe das SQL-Statement unter den
Query-Analyzer ausprobiert da ich es später dann in einem
Formular verwenden möchte. Dort kann dann der Kunde je nach
belieben, ob nun neue Empfänger da sind, diese auf das
Bundesland updaten.
Hat jemand eine Idee warum ich nicht alle Empfänger erwische
bzw. der SQL-Server???
du änderst doch nur diejenigen Einträge, bei der ein ‚Fehler‘ in der Zuordnung vorliegt - so interpretiere ich jedenfalls den Teil der WHERE-Bedingung
WHERE Land = 'D'
and (
Bundesland 'Baden-Württemberg'
or Bundesland is null
)
Kann es nicht sein, dass bei den anderen Eintraegen bereits das richtige Bundesland gespeichert ist und deswegen kein Update kommt…