Casablanca: SQL-Functions

Hallo,

ich habe eine SQL-Function. Diese wird aus einem C#-Quellcode mit einigen Parametern aufgerufen. Meine Frage ist, ob es eine Weg gibt, diese Parameter, die teilweise als string übergeben werden, direkt als einem Tabellenfeld in die SQL-Anweisung der Function einzusetzen?

Die SQl-Function sieht an der Stelle so aus:


   ....

   Insert into @result(id, datum, Value1, Value2) select id, datum, @val1, @val2 from ...

   ....

Momentan wickle ich das Ganze sher unsauber über eine Case-When-Anweisung ab.


   ....

   Insert into @result(id, datum, Value1, Value2) select id,  datum,
   case @val1
   when 'test1' then field1
   when 'test2' then field2

   from ...
   ....

und dasselbe wie obne für @val2.

Gruß

  1. Tach!

    ich habe eine SQL-Function. Diese wird aus einem C#-Quellcode mit einigen Parametern aufgerufen. Meine Frage ist, ob es eine Weg gibt, diese Parameter, die teilweise als string übergeben werden, direkt als einem Tabellenfeld in die SQL-Anweisung der Function einzusetzen?

    Wenn ich das richtig sehe, möchtest du ein Statement erstellen, dessen Feldnamen aus Parametern eines Prepared Statements kommen. Sowas ist meines Wissens nicht möglich, das ist in Prepared Statements nicht vorgesehen. Du kannst nur die Query selbst in der abfragenden Umgebung (also hier in C#) mit Stringfunktionen zusammenstellen.

    dedlfix.

    1. Hi,

      danke. Die SQL-Function wird in C# wie jede andere Methode mit Parametern aufgerufen, Du meinst, dass man die Query wie "insert into tabelle Values(...) select (...)" als Parameter übergeben soll? Dan hat man ja auf der SQL-Seite das Gleiche Problem wie wenn man einen Parametert übergen möchte. Die Query wird einfach als String behandelt.

      Gruß

      1. Tach!

        Die SQL-Function wird in C# wie jede andere Methode mit Parametern aufgerufen, Du meinst, dass man die Query wie "insert into tabelle Values(...) select (...)" als Parameter übergeben soll?

        Nein. Auch C# verwendet Prepared Statements. Als Parameter kann man nur Werte übergeben, keine Syntaxbestandteile (Feld- und Tabellennamen zählen dazu).

        Es liegt aber in deiner Hand, den String, der die Query bildet, selbst zusammenzustellen, den du der Prepare-Funktion übergibst (oder in C# dem Konstruktor von SqlCommand).

        dedlfix.

        1. Hallo,

          ich bin nicht ganz sicher, obe ich dich richtig verstehe. Was reines SQL-Statement unter C# angeht, kann man dieses als String zusammenseten.

          
             var sqlQuery = "Select id, name, plz from myTable where id=" + varId
          
          

          Ich weiß aber nicht ganz genau, wie das direkt im SQL-Server vonstatten gehen soll. Das ist ja meine eigenliche Frage. Die SQL-Function wird ja auf der Seite des SQL-Servers gespeichet.

          Gruß

          1. Tach!

            Ich weiß aber nicht ganz genau, wie das direkt im SQL-Server vonstatten gehen soll. Das ist ja meine eigenliche Frage. Die SQL-Function wird ja auf der Seite des SQL-Servers gespeichet.

            Ach, das ist dein Begehr. Du hast eine SQL-Function nicht im Sinne einer SQL ausführenden Funktion in deinem C#-Code sondern eine auf dem MS-SQL-Server. Dass MySQL sowas kann, wusste ich, deshalb hab ich nach "mssql equivalent mysql prepare" gesucht und jene Frage gefunden. Schau dir da die Antworten an.

            dedlfix.