SQL-Anweisung in gespeicherter Prozedur

Guten Abend,

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???

Grüße
Christian

Hallo,

du solltest einfach mal nachsehen, welche Daten fehlen.

Warum holst du dir nicht einfach eine PLZ Datenbank mit Bundesländern
aus dem Internet? Hier zum Beispiel:
http://www.lueftungsnet.de/programmieren/orte_sql.html
(hab nicht reingeschaut, also ohne Gewähr.)

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Für mich sieht es aus, als hättest du eine Klammer vergessen (man hat immer eine zuviel oder zuwenig :wink: ), und vielleicht auch ein Semikolon am Ende des Updates - aber bei nicht-Oracle-DBs kann das ja anders sein.

and ( plz

------^

Gruß, muzel

der link ist Goldwert…danke. Aber dennoch, habe auch geklammert und mit GO-Anweisungen gearbeitet. Verstehe es einfach nicht und das stört mich halt.

Danke für die schnellen Antworten!

Grüße
Christian

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]

Hallo Christian

Guten Abend,

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…

gruss
bernhard

Welchen Datentyp hat denn deine PLZ-Spalte?
Ein between wirkt sich bei einem varchar(string)-Datentyp anders aus als bei einem long bzw. int-Datentyp.

MfG
Karstne

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]