MSSQL SQL-Syntax Update Case IF ELSE
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 100665
Url: https://administrator.de/forum/mssql-sql-syntax-update-case-if-else-100665.html
Ausgedruckt am: 21.12.2024 um 17:12 Uhr
9 Kommentare
Neuester Kommentar
Hi Globetrotter und Willkommen im Forum
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
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
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
die vielen Updates könnte man ersetzen durch:
update UPSTRANSFER
set LieferAnrede = IsNull (A1Anrede, A0Anrede),
LieferName1 = IsNull (A1Name1, A0Name1),
LieferName2 = IsNull (A1Name2, A0Name2),
...
Was Du in Deinem Nachsatz geschrieben hast würde gelöst durch:
update UPSTRANSFER
set LieferAnrede = A0Anrede,
LieferName1 = A0Name1,
LieferName2 = A0Name2,
...
where A0Anrede is not null
update UPSTRANSFER
set LieferAnrede = A1Anrede,
LieferName1 = A1Name1,
LieferName2 = A1Name2,
...
where A0Anrede is null
update UPSTRANSFER
set LieferAnrede = case when A0Anrede is null then A1Anrede else A0Anrede end,
LieferName1 = case when A0Anrede is null then A1Name1 else A0Name1 end,
LieferName2 = case when A0Anrede is null then A1Name2 else A0Name2 end,
...
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
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.
Grüße
Biber
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.
Grüße
Biber
Moin Globetrotter,
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
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