Dieser Beitrag ist schon älter. Bitte vergewissern Sie sich, dass die Rahmenbedingungen oder der enthaltene Lösungsvorschlag noch dem aktuellen Stand der Technik entspricht.

MSSQL SQL-Syntax Update Case IF ELSE

Mitglied: Globetrotter

Hallöchen...

arbeite unter MSSQL2K SP4 und möchte via DTS dieses Script ausführen. Da ich in Sachen SQL nicht sehr tief drin bin kann es schon sein, dass sowas gar nicht gehen kann. Ursprünglich enstand diese Idee aus folgendem Script:

Update Table
Set Column2 = Case When Column1 Is NULL
Then 'F'
Else 'O'
End

Mein Script:

Update dbo.UPSTRANSFER
Set dbo.UPSTRANSFER.LieferAnrede = Case When dbo.UPSTRANSFER.A1Anrede Is NULL Then 'dbo.UPSTRANSFER.A0Anrede',
dbo.UPSTRANSFER.LieferName1 = dbo.UPSTRANSFER.A0Name1,
dbo.UPSTRANSFER.LieferName2 = dbo.UPSTRANSFER.A0Name2,
dbo.UPSTRANSFER.LieferStrasse = dbo.UPSTRANSFER.A0Strasse,
dbo.UPSTRANSFER.LieferPLZ = dbo.UPSTRANSFER.A0PLZ,
dbo.UPSTRANSFER.LieferOrt = dbo.UPSTRANSFER.A0Ort,
dbo.UPSTRANSFER.LieferLand = dbo.UPSTRANSFER.A0Land,
dbo.UPSTRANSFER.LieferNNBetrag = dbo.UPSTRANSFER.Bruttobetrag
Else
dbo.UPSTRANSFER.A0Anrede,
dbo.UPSTRANSFER.LieferName1 = dbo.UPSTRANSFER.A1Name1,
dbo.UPSTRANSFER.LieferName2 = dbo.UPSTRANSFER.A1Name2,
dbo.UPSTRANSFER.LieferStrasse = dbo.UPSTRANSFER.A1Strasse,
dbo.UPSTRANSFER.LieferPLZ = dbo.UPSTRANSFER.A1PLZ,
dbo.UPSTRANSFER.LieferOrt = dbo.UPSTRANSFER.A1Ort,
dbo.UPSTRANSFER.LieferLand = dbo.UPSTRANSFER.A1Land,
dbo.UPSTRANSFER.LieferNNBetrag = dbo.UPSTRANSFER.Bruttobetrag
End;

Muss ich nun wirklich für jedes Feld ein eigenes Update schreiben oder was würdet Ihr machen ?
Mit diesem Script sollen alle 2 Minuten ca. 2000 Datensätze aktualisiert werden welche in diese Tabelle 'reingeblasen* werden.

Danke für Eure Tips...

GlobeTrotter

Content-Key: 100665

Url: https://administrator.de/contentid/100665

Ausgedruckt am: 25.07.2021 um 11:07 Uhr

Mitglied: problemsolver
problemsolver 31.10.2008 um 08:50:51 Uhr
Goto Top
Hi Globetrotter und Willkommen im Forum :-) face-smile

ich verstehe nicht so 100%tig Dein Anliegen... Aber so wie es ausschaut, wären eventuell Trigger etwas für Dich...

Zum reinschnuppern, falls Du hiervon noch nichts gehört hast... http://derentwickler.de/itr/features/psecom,id,168,nodeid,77.html

Es gibt sicherlich noch mehr Seiten zu diesem Thema.

Falls ich gar nicht den Nerv getroffen habe, bitte ich/wir um Konkretisierung deines Problems.

Gruß

Markus
Mitglied: Globetrotter
Globetrotter 31.10.2008 um 09:14:22 Uhr
Goto Top
Hallo Markus,

danke für Deine Hilfe.

Deine Triggerlösung ist natürlich interessant - jedoch sollte ich damit erst ausgiebig testen bevor ich damit auf das Produktivsystem gehe...
Bisher sieht mein script nun so aus und funktioniert auch. Das Problem ist nur, dass man dies eigentlich in einem Rutsch erledigen sollte:


Update dbo.UPSTRANSFER Set dbo.UPSTRANSFER.LieferAnrede = Case When dbo.UPSTRANSFER.A1Anrede Is NULL Then 'dbo.UPSTRANSFER.A0Anrede' Else 'dbo.UPSTRANSFER.A1Anrede' End;

Update dbo.UPSTRANSFER Set dbo.UPSTRANSFER.LieferName1 = Case When dbo.UPSTRANSFER.A1Name1 Is NULL Then 'dbo.UPSTRANSFER.A0Name1' ELSE 'dbo.UPSTRANSFER.A1Name1' End;

Update dbo.UPSTRANSFER Set dbo.UPSTRANSFER.LieferName2 = Case When dbo.UPSTRANSFER.A1Name2 Is NULL Then 'dbo.UPSTRANSFER.A0Name2' ELSE 'dbo.UPSTRANSFER.A1Name2' End;

Update dbo.UPSTRANSFER Set dbo.UPSTRANSFER.LieferStrasse = Case When dbo.UPSTRANSFER.A1Strasse Is NULL Then 'dbo.UPSTRANSFER.A0Strasse' ELSE 'dbo.UPSTRANSFER.A1Strasse' End;

Update dbo.UPSTRANSFER Set dbo.UPSTRANSFER.LieferPLZ = Case When dbo.UPSTRANSFER.A1PLZ Is NULL Then 'dbo.UPSTRANSFER.A0PLZ' ELSE 'dbo.UPSTRANSFER.A1PLZ' End;
Update dbo.UPSTRANSFER Set dbo.UPSTRANSFER.LieferOrt = Case When dbo.UPSTRANSFER.A1Ort Is NULL Then 'dbo.UPSTRANSFER.A0Ort' ELSE 'dbo.UPSTRANSFER.A1Ort' End;

Update dbo.UPSTRANSFER Set dbo.UPSTRANSFER.LieferLand = Case When dbo.UPSTRANSFER.A1Land Is NULL Then 'dbo.UPSTRANSFER.A0Land' ELSE 'dbo.UPSTRANSFER.A1Land' End;
Update dbo.UPSTRANSFER Set dbo.UPSTRANSFER.LieferNNBetrag = 'dbo.UPSTRANSFER.Bruttobetrag'


Gruss Matze
Wenn jwmand eine elegantere und vorallem performantere Lösung parat hätte wäre ich sehr dankbar!

Es handelt sich hierbei um das einsetzen der Lieferanschrift. Wenn abweichende Lieferanschrift vorhanden, soll er diese nehmen - ansonsten die Rechnungsanschrift. Viel lieber wäre mir aber wenn es Möglich wäre, dass man A0Anrede abfrägt - wenn diese nicht NULL ist - soll er alle Werte von A0xxx nehmen - ansonsten die Werte von A1xxx.
Mitglied: MadMax
MadMax 31.10.2008 um 10:59:34 Uhr
Goto Top
Hallo Matze,

die vielen Updates könnte man ersetzen durch:

Was Du in Deinem Nachsatz geschrieben hast würde gelöst durch:
oder
Welche der beiden Lösungen schneller ist kann ich nicht genau sagen, ich nehme an die zweite.

Prüf aber nochmal nach, was Du willst. Dein momentanes Skript prüft nach, ob die A1-Werte NULL sind, was auch Deinem ersten Beitrag entspricht. Dein Nachsatz im vorigen Beitrag geht aber auf eine Prüfung von A0Anrede.

Gruß, Mad Max
Mitglied: Biber
Biber 31.10.2008 um 11:24:01 Uhr
Goto Top
Moin Globetrotter,

unbeachtet der sauberen handwerklichen Umsetzung durch Mad Max ist das Konzept totale Grütze, da Du so oder so jeweils ein redundantes Feld-Pärchen mit identischem Inhalt in jedem Datensatz hast.

Welchen sittlichen Nährwert haben denn die Felder "LieferAnrede", "Liefername",...??
Deren Inhalte lassen sich doch immer aus A0bla/A1bla ableiten -
... also warum spreichern?

Mach das beim Select-Zugriff (z.B. beim Rechnungsschreiben) oder verwende die IFNull()-Mimik in einem View mit den-LieferXXX-Feldern als errechneten Feldern.

Beim Versuch, diese redundante Tabellenstruktur produktiv zu setzen würdest Du sonst eh von Euren DBAs vom Hof gejagt werden. ;-) face-wink

Grüße
Biber
Mitglied: Globetrotter
Globetrotter 31.10.2008 um 12:35:54 Uhr
Goto Top
Servus Biber...
Danke für Deinen Kommentar ;)
Ich brauche diese bescheidene Tabelle um die Daten in UPS Worldship zu ziehen. Leider kann das UPS-Proggy keine logischen Verknüpfungen auf meine SQL-DB setzen, daher dieser Unfug.

Was spricht gegen eine Triggerlösung ?

Ich denke wenn man diese "sinnvoll" deklariert wäre 1. nicht so viel Traffic in der DB und 2. wäre es eine redundante Lösung, oder ?

Gruessle

Ps. und da ich nicht vom Hof gejagt werden will, hoffe ich, dass mir hier jemand DIE LÖSUNG bieten kann ;)
Mitglied: Biber
Biber 31.10.2008 um 12:58:49 Uhr
Goto Top
Moin Globetrotter,

Leider kann das UPS-Proggy keine logischen Verknüpfungen auf meine SQL-DB setzen,
Wie...? Würde dieses UPS-Geraffel merken, wenn Du ihm einen View unterjubelst statt die physische Struktur?
Aber sollte es so sein, dann ist es natürlich 27000mal sinnvoller, die Tabellenfelder beim INSERT/UPDATE via Trigger SATZweise anzupassen als einmal am Tag alle Datensätze neu zu arrangieren.
Das kann doch auch kein Anwender ernstfach erwarten, dass sich Datensätze im operativen Systen irgendwann nachts ändern, nachdem er am Bildschirm mittags gesagt hat "Daten so speichern wie angezeigt?"

Grüße
Biber
Mitglied: Globetrotter
Globetrotter 31.10.2008 um 13:11:55 Uhr
Goto Top
Jo...
Da das Ding heute Nachmittag laufen muss werde ich erst einmal die 'Schlachtmethode' bis heute Abend laufen lassen. Übers Wochenende werde ich mich dann wohl mal mit den Triggern beschäftigen. Sobald dieses Dingens dann läuft werde ich das Script hier nochmal reinstellen und mir von Euch den Hintern versohlen lassen ;)

Gruesse Matze
Mitglied: RottenSon667
RottenSon667 13.08.2010 um 15:15:33 Uhr
Goto Top
...und wie sah es nun aus? ich meine, das ganze ist ja nun auch lütt her.
Mitglied: Globetrotter
Globetrotter 15.04.2021 um 18:07:18 Uhr
Goto Top
@RottenSon667
Kann ich Dir leider nicht mehr sagen ;)
Sorry..

Gruss Globe!
Heiß diskutierte Beiträge
question
RAM-Zugriff auf einem neuen High-Performance Server, teilweise um Welten langsamer als auf einer WorkstationMysticFoxDEVor 1 TagFrageBenchmarks47 Kommentare

Moin Zusammen, mir ist gestern beim Optimieren eines neuen Servers eine Sonderheit aufgefallen, die ich mir so beim besten Willen, momentan absolut nicht erklären kann. ...

general
Kosten nicht gerechtfertigt? Dienstleister stellt Kosten für "Troubleshooting" bei Neuanschaffung von HCI + CoreSwitchDirty2186Vor 1 TagAllgemeinZusammenarbeit17 Kommentare

Hallo Zusammen, ich interessiere mich für Eure Meinung zu dem Thema Leistungsnachweise von Systemhäusern und Dienstleistern und deren Berechnung von Leistungen. Da sich hier ja ...

question
Listet Microsoft Default ACLs von Windows?DerWoWussteVor 1 TagFrageSicherheit18 Kommentare

Moin Kollegen. Nach dem Sicherheits-GAU "Hivenightmare" stellt sich mir die Frage, wie ich in Zukunft sicherstellen kann, dass die ACLs der Systemdateien in Windows korrekt ...

question
Erfahrungen mit CodeTwo Exchange Migration von 2016-2019dlohnierVor 1 TagFrageExchange Server19 Kommentare

Hallo, ich möchte unseren Exchange Server 2016 der noch auf WIndows 2016 läuft auf einen Server 2019 mit Exchange 2019 migrieren. Habe das Tool "CodeTwo ...

question
Doppelte A-Records in DNSBPeterVor 1 TagFrageWindows Server10 Kommentare

Hallo, unsere Windows Notebooks registrieren sich im DNS mit ihrer Lan- und Wlan Adresse. D.h. es gibt 2 gleiche Namen mit 2 unterschiedlichen IP-Adressen. Wie ...

question
2U Home-Server Frage zur HardwaremossoxVor 22 StundenFrageServer-Hardware10 Kommentare

Hallo zusammen, ich habe in den letzten Jahren auf die Systeme von Synology gesetzt. Im Wesentlichen ging es immer nur um simple CIFS Dienste, nichts ...

question
Powershell Ordner löschen die älter als x Tage sindsascha46Vor 20 StundenFrageEntwicklung6 Kommentare

Hallo Ich würde gerne in einem Verzeichnis alle Ordner die älter als X Tage sind löschen. Aber irgendwie bekomme ich das nicht hin. Bisher habe ...

question
Firmengelände Glasfaser mehrere GebäudeTonLichtVideoVor 18 StundenFrageNetzwerke4 Kommentare

Hallo zusammen, Ist Zustand: Firmengelände mit mehreren großen Hallen die zentral per Glasfaser verbunden werden sollen. Längen zwischen 100 und 400 Metern. Aufgrund der Zukunftssicherheit ...