Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
SQL Statement Case
AlfameisterT
myCSharp.de - Member



Dabei seit:
Beiträge: 154

Themenstarter:

SQL Statement Case

beantworten | zitieren | melden

Hallo,

ich habe in meinem Select mehrere Case Abfragen drinn.
Ist es möglich den Wert in 'Case' in der Then oder Else noch mal zu verwenden?

CASE (SELECT lange Abfrage) is null then 'text' else (SELECT lange Abfrage) end AS Spaltenname


So würde doch die Select-Anweisung 2 mal ausgeführt werden, d.h. einmal umsonst.


.
private Nachricht | Beiträge des Benutzers
joerg.uth
myCSharp.de - Member

Avatar #avatar-2080.jpg


Dabei seit:
Beiträge: 484
Herkunft: Lonnig

beantworten | zitieren | melden

Du könntest das Ergebnis in eine Variable stecken.
Declare @CaseValue nvarchar(50) -- Als Beispiel
SET @CaseValue = Select foo from Table Where foo = foo;

CASE (@CaseValue)

Jörg
private Nachricht | Beiträge des Benutzers
Tom
myCSharp.de - Member



Dabei seit:
Beiträge: 433
Herkunft: Home is where my notebook is

beantworten | zitieren | melden

Hm ...

So wie ich das sehe wird das Select Statement nur einmal ausgeführt.
Das 2. liegt ja in einem Else Block.

Das mit der Variable klingt nach nen overkill

Wenn du dir aber Schreibarbeit sparen willst, würde ich über einen dynamischen Zusammenbau des SQL Strings nachdenken.
Kann natürlich auch ein overkill sein .... kommt immer drauf an wie exzessiv das ganze genutzt wird.

PS:
Generell kann man selbstverständlich Zwischenwerte in Variablen packen. Es kommt aber immer auf den Kontext an, ob es Sinn macht oder nicht.

Gruß,
Tom
private Nachricht | Beiträge des Benutzers
norman_timo
myCSharp.de - Member

Avatar #avatar-1775.jpeg


Dabei seit:
Beiträge: 4.506
Herkunft: Wald-Michelbach (Odw)

beantworten | zitieren | melden

Hallo zusammen,

sind hierfür nicht Views gedacht? Ich habe noch kein solches Konstrukt bei einer DB-Abfrage gesehen.

Ich würde die Abfrage in einer View abspeichern. Dann kann man überprüfen ob das Ergebniss Treffer hatte, oder nicht, und dementsprechend reagieren.

Gruß
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
private Nachricht | Beiträge des Benutzers
AlfameisterT
myCSharp.de - Member



Dabei seit:
Beiträge: 154

Themenstarter:

beantworten | zitieren | melden

Das mit der View habe ich schon probiert, allerdings läßt der mich keine Views mit Parameter speichern.

Geht das mit den Variablen nur bei Prozeduren oder auch normalen SQL Abfragen?
private Nachricht | Beiträge des Benutzers
Tom
myCSharp.de - Member



Dabei seit:
Beiträge: 433
Herkunft: Home is where my notebook is

beantworten | zitieren | melden

Variablen gehen in nativen Statements sowie Procedures.
Weiss jetzt gar nicht ob die in Views auch funktionieren.

Btw, das mit dynamisch zusammenbauen, meinte ich eher vom Server Code aus.

Gruß,
Tom
private Nachricht | Beiträge des Benutzers
AlfameisterT
myCSharp.de - Member



Dabei seit:
Beiträge: 154

Themenstarter:

beantworten | zitieren | melden

Danke.
Wer das mit den Variablen mal probieren.

Ja, die Queries werden im Code zusammen gebaut. Ich hatte vorher diese Problematik auch mit 2 oder mehreren Abfragen hintereinander gelößt.

Nur war die Performance einfach misst. Habe festgestellt wenn ich die Komplexität in den SQL Server ausagere, eine deutlich bessere Gesamtperformance erhalte.
private Nachricht | Beiträge des Benutzers
norman_timo
myCSharp.de - Member

Avatar #avatar-1775.jpeg


Dabei seit:
Beiträge: 4.506
Herkunft: Wald-Michelbach (Odw)

beantworten | zitieren | melden

Hallo zusammen,
Zitat
Nur war die Performance einfach misst. Habe festgestellt wenn ich die Komplexität in den SQL Server ausagere, eine deutlich bessere Gesamtperformance erhalte.

Einer mehr, der anfängt Datenbanken zu verstehen ;-)

Ich bin immer der Meinung: Nur die DB weiß, wie sie am schnellsten eine Befehlsfolge abarbeitet. Deshalb bin ich auch ein Freund, dass man so viel Logik wie möglich in die DB packen sollte.

Weiter so, auch wenn es anstrengend ist...

Gruß
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
private Nachricht | Beiträge des Benutzers
Tom
myCSharp.de - Member



Dabei seit:
Beiträge: 433
Herkunft: Home is where my notebook is

beantworten | zitieren | melden

Naja das mit der Speed auf der DB würd ich bei 99% der "normalen" Fälle zustimmen

Wenn man sich aber ein bisschen mit Ausführungsplänen und Kostenabschätzungen beschäftigt, merkt man recht fix was man tunlichst auf der DB vermeiden sollte.
Dazu gehören z.B. komplexe String Operationen ^^

Gruß,
Tom
private Nachricht | Beiträge des Benutzers
norman_timo
myCSharp.de - Member

Avatar #avatar-1775.jpeg


Dabei seit:
Beiträge: 4.506
Herkunft: Wald-Michelbach (Odw)

beantworten | zitieren | melden

Hallo TOM,

völlig richtig, man sollte natürlich nur so viel Datenbanklogik in die DB packen, und nicht anfangen darin zu "programmieren".

Stimmt, das kann man laut meiner Aussage auch falsch verstehen.

Ich denke das sollte jedem klar sein (hoffentlich), dass eine DB nicht auf "Rechnen" spezialisiert ist, sondern nur darauf, wie und in welcher Reihenfolge Daten per Anfrage an den Mann kommen.

Gruß
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
private Nachricht | Beiträge des Benutzers