Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

MSSQL SQL-Syntax Update Case IF ELSE

Frage Entwicklung Datenbanken

Mitglied: Globetrotter

Globetrotter (Level 1) - Jetzt verbinden

30.10.2008, aktualisiert 31.10.2008, 12293 Aufrufe, 8 Kommentare

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
Mitglied: problemsolver
31.10.2008 um 08:50 Uhr
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
Bitte warten ..
Mitglied: Globetrotter
31.10.2008 um 09:14 Uhr
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.
Bitte warten ..
Mitglied: MadMax
31.10.2008 um 10:59 Uhr
Hallo Matze,

die vielen Updates könnte man ersetzen durch:
01.
update	UPSTRANSFER 
02.
set	LieferAnrede = IsNull (A1Anrede, A0Anrede), 
03.
	LieferName1 = IsNull (A1Name1, A0Name1), 
04.
	LieferName2 = IsNull (A1Name2, A0Name2), 
05.
	...
Was Du in Deinem Nachsatz geschrieben hast würde gelöst durch:
01.
update	UPSTRANSFER 
02.
set	LieferAnrede = A0Anrede, 
03.
	LieferName1 = A0Name1, 
04.
	LieferName2 = A0Name2, 
05.
	... 
06.
where	A0Anrede is not null 
07.
 
08.
update	UPSTRANSFER 
09.
set	LieferAnrede = A1Anrede, 
10.
	LieferName1 = A1Name1, 
11.
	LieferName2 = A1Name2, 
12.
	... 
13.
where	A0Anrede is null
oder
01.
update	UPSTRANSFER 
02.
set	LieferAnrede = case when A0Anrede is null then A1Anrede else A0Anrede end, 
03.
	LieferName1 = case when A0Anrede is null then A1Name1 else A0Name1 end, 
04.
	LieferName2 = case when A0Anrede is null then A1Name2 else A0Name2 end, 
05.
	...
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
Bitte warten ..
Mitglied: Biber
31.10.2008 um 11:24 Uhr
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
Bitte warten ..
Mitglied: Globetrotter
31.10.2008 um 12:35 Uhr
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 ;)
Bitte warten ..
Mitglied: Biber
31.10.2008 um 12:58 Uhr
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
Bitte warten ..
Mitglied: Globetrotter
31.10.2008 um 13:11 Uhr
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
Bitte warten ..
Mitglied: RottenSon667
13.08.2010 um 15:15 Uhr
...und wie sah es nun aus? ich meine, das ganze ist ja nun auch lütt her.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Datenbanken
gelöst SQL - mehrere UPDATE-Anweisungen in einem String per vbs (4)

Frage von goodbytes zum Thema Datenbanken ...

Windows Server
Whatsup Gold update SQL Server (2)

Frage von Neonium zum Thema Windows Server ...

Windows Server
gelöst Update von sql server express 2005 sp4 auf 2008 klappt nicht (11)

Frage von jhaustein zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (27)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (20)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...