Announcement

Collapse
No announcement yet.

SQL für "universal" SP mit Parametern die in bestimmten Fällen mit NULL überg. werden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL für "universal" SP mit Parametern die in bestimmten Fällen mit NULL überg. werden

    hallo,
    ich versuche in einer Software, Anzeige Prozeduren mit verschiedenen Fällen, wenn möglich, mit einer SP zu erledigen. Hat zur Folge dass ich in die SP zunächst viele Parameter übergebe, die ich in bestimmten Fällen gar nicht brauche. Im Where-teil schreibe ich dann die Parameter so rein dass auch die richtigen Daten angezeigt werden wenn der Parameter NULL hat.

    Bsp.: WHERE projektID = IsNull(@intprojektID,projektID)

    Jetzt habe ich einen sonderfall für den ich noch eine Lösung habe. Es geht um Projekte. Ich möchte Projekte bei denen in einem bestimmten Zeitraum gearbeitet wurde. Dieses "gearbeitet" steht in einer anderen Tabelle die auf die projektID per FK verweist. Ich habe es über Subselect im WHERE-Teil versucht WHERE projektID in (select auftrag_projektID from x, y where bea_datum between @start and @ende)

    Hier bekomme ich jedoch keinen Treffer in meinen anderen Fällen wenn ich @start @ende sehr groß wähle und noch nicht dran gearbeitet wurde. D.h. das innere SQL hat keinen Treffer und die Projektliste bleibt leer. Ich suche eine Schreibweise für den WHERE-Teil der mir Treffer liefert damit die anderen Fälle funktionieren wenn mich gearbeitet von/bis gar nicht interessiert.

  • #2
    Wenn ich das richtig verstanden habe, kannst Du versuchen, Deine unbelegten Parameter (isnull(@param, <Ersatzwert>) durch eine Case Anweisung dazu bringen, die Joinbedingung zu erfüllen.
    Entweder indem Du im Null Case den Wert der Haupttabelle ausgibst oder mit Left/Outer Join arbeitest.
    Da Deine Angaben "etwas dürftig" sind, kann ich leider nicht konkreter werden.
    Im Übrigen ist bei solchen Konstruktionen fragwürdig, ob man sich oder den Kollegen mit solch einem Allzweck-SQL einen Gefallen tut. Performance, Wart- und Lesbarkeit leiden u.U. stark.
    Gruß, defo

    Comment


    • #3
      Warum dann nicht so:

      ... WHERE ... and (projektID in (select auftrag_projektID from x, y where bea_datum between @start and @ende) or bea_datum is NULL) ...

      bye,
      Helmut

      Comment

      Working...
      X