Benutzer mit den meisten Antworten
Bedingungen in eine Variable schreiben

Frage
-
Ich möchte eine lange Bedingung, die ich in der gleichen query/SP mehrmals brauche in eineVariable schreiben. Es sieht so aus:
select sum(PaidAmount) as PaidAmount from Cost
where Date <@Date ActNo = @ActNo and (
payspc.Code like 'PM%' or
payspc.Code like 'DL%' or
payspc.Code like 'DC2%'-- or
-- es folgen 20 weitere derartige Zeilen )Ich möchte nicht mehrfach diesen Bandwurmausdruck (der Ausdruck in Klammern ist fest, die anderen Bedingungen sind variabel) einkopieren, sondern es so vereinfachen wie
Declare @Bed as varchar(1000);
set @Bed = 'payspc.Code like 'PM%' or
payspc.Code like 'DL%' or
payspc.Code like 'DC2%' usw. 'select sum(PaidAmount) as PaidAmount from Cost
where Date <@Date ActNo = @ActNo and @BedAber das klappt wohl aus verschieden Gründen so nicht. Wie kann man das besser machen?
- Bearbeitet KlausDieter L Mittwoch, 6. Juni 2012 09:11
Antworten
-
Hallo Klaus-Dieter, was hältst Du von einer Sicht?
create view V_MeineDaten as select PaidAmount, Date, Actno from Cost where ( payspc.Code like 'PM%' or payspc.Code like 'DL%' or payspc.Code like 'DC2%'-- or -- es folgen 20 weitere derartige Zeilen )
Später greifst Du dann auf die Sicht zu
select sum(PaidAmount) as PaidAmount from V_MeineDaten where Date <@Date ActNo = @ActNo
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
www.insidesql.org/blogs/cmu- Als Antwort vorgeschlagen Olaf HelperMVP Mittwoch, 6. Juni 2012 10:38
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 19. Juni 2012 07:00
Alle Antworten
-
mit dynamic sql wuerde es gehen aber damit handelst Du Dir andere Probleme ein.
Du wuerdest dann den SQL Befehl in einem string selber zusammensetzen und dann via executesql ausfuehren.
aber wenn Du diesen Ausdruck mit etwa 20 Zeilen nur in einer Anweisung brauchst, dann wuerde ich sagen "forget it" / "vergiss es" da Du damit ja keinen Vorteil erreichst sondern nur Probleme einfangen koenntest.
Also warum stoert es Dich, dass Du die 20 Zeilen auffuehren musst ?
falls die Anweisung nicht zu haeufig und mit einer grossen Tabelle aufgerufen wird, koenntest Du ja einen Blick auf UDF (user defined function) werfen ob diese Dir besser gefaellt.
siehe hier fuer UDF : http://msdn.microsoft.com/en-us/magazine/cc164062.aspx
Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.
-
(ich habe eben noch einen Fehler (or statt Komma) korrigiert )
Hi Daniel,
vielen dank für die Info. OK, es sind sogar 35 like-Bedingungen und der ganze Block erscheint dann 15x in der gleichen SP. Das sieht für meinen Geschmack unprofessionell aus und ist vor allem redundant.
Das mit UDF ist für mich Neuland und jetzt habe ich keine Zeit mich darin zu vertiefen. Aber hast du vielleicht ein Beispiel für dynamic sql?
Gruß Klaus
-
Hallo Klaus-Dieter, was hältst Du von einer Sicht?
create view V_MeineDaten as select PaidAmount, Date, Actno from Cost where ( payspc.Code like 'PM%' or payspc.Code like 'DL%' or payspc.Code like 'DC2%'-- or -- es folgen 20 weitere derartige Zeilen )
Später greifst Du dann auf die Sicht zu
select sum(PaidAmount) as PaidAmount from V_MeineDaten where Date <@Date ActNo = @ActNo
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
www.insidesql.org/blogs/cmu- Als Antwort vorgeschlagen Olaf HelperMVP Mittwoch, 6. Juni 2012 10:38
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 19. Juni 2012 07:00