Announcement

Collapse
No announcement yet.

CASE When ohne Select vorne dran in SP mgl.?

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

  • CASE When ohne Select vorne dran in SP mgl.?

    Hallo, ich würde gerne in einer SP abhängig von einer übergebenen ID andere SELECTs zurückgeben welche aber die gleichen Felder zurückgeben. Also es unterscheidet sich nicht der Where-Teil sondern das komplette SQL, also auch die Tabellen, bzw. einmal Tabelle mit Joins und dann je nach Fall Tabellenwertfunktion o.ä..

    Jetzt bräuchte ich so etwas wie Case When mit einem Else-Zweig um das zu lösen. Jedoch irritiert mich das "SELECT" das ich anscheinend benötige bei CASE WHEN...

    Gibt es eine Schreibweise bei der ich auf das SELECT verzichten kann oder muss ich in jedem Fall den ich habe in eine temporären-Tabelle schreiben und mir nach dem CASE wieder die Daten aus der temporären-Tabelle holen um diese von der SP zurück geben zu können?

  • #2
    Bin ja gewillt zu helfen, aber kannst du mal ein Beispiel zeigen? Ich kenn mich jedenfalls nicht aus, was du meinst
    ... andere SELECTs zurückgeben welche aber die gleichen Felder zurückgeben ...


    bye,
    Helmut

    Comment


    • #3
      in etwa so:

      CASE 1
      SELECT a, b, c FROM tbl_01

      CASE 2
      SELECT x AS a, y AS b, z AS c FROM tbl_02 INNER JOIN tbl_03 on tbl_02.t = tbl_03.e

      CASE ELSE
      SELECT g AS a, f AS b, e AS c FROM dbo.udf_01('test','test2')

      Comment


      • #4
        Wenn du das in einer stored proc hast, dann probiere doch einfach mal das:
        Code:
        create procedure test (@param int) as
        BEGIN
          if @param = 1 SELECT a, b, c FROM tbl_01
          if @param = 2 SELECT x AS a, y AS b, z AS c FROM tbl_02 INNER JOIN tbl_03 on tbl_02.t = tbl_03.e
          if @param = 3 SELECT g AS a, f AS b, e AS c FROM dbo.udf_01('test','test2') 
        END
        bye,
        Helmut

        Comment


        • #5
          hallo,
          ja das mit dem If funktioniert schon, nur habe ich bei einem If über mehrere (>1) keinen Else-Zweig

          Deshalb würde ich gerne CASE WHEN verwenden was aber SELECT CASE erfordert

          SELECT CASE WHEN @param = 1 THEN
          SELECT x
          CASE WHEN @param = 2 Then
          SELECT y
          CASE ELSE
          SELECT a
          END

          geht nicht

          Comment


          • #6
            Aber welche Werte kommen können weisst du schon?
            Dann schreibst du als Abschluß (wenn du mein Bespiel hernimmst):
            ...
            if @param not in (1, 2, 3) select ....

            und das ist dann dein ELSE-Zweig

            bye,
            Helmut

            Comment


            • #7
              joa, klingt logisch ) danke

              Comment

              Working...
              X