none
SQL-Query mit WHERE customer IN (1,3,5) mit SQL Parametern RRS feed

  • Frage

  • Hallo,

    ich habe bisher noch kein Beispiel / Doku für die Verwendung von SQL Parametern gefunden, die die WHERE-bedingung mit dem IN Kennwort ermöglichen.

    Beispiel: SELECT a,b FROM c WHERE e IN (2,24,133) oder SELECT a,b FROM c WHERE e in ('gruen','gelb')

    Hier sollte jeweils (2,24,133) bzw. ('gruen','gelb') als Parameter an das command object bzw. data adapter übergeben werden.

    Kennt Ihr Beispiele, Dokus, Links?

    Montag, 11. April 2011 13:30

Antworten

  • Hi,
    ich würde gerne formulieren: "SELECT a FROM c WHERE e IN (@para)", wobei @para für 1 oder 1,34,22 oder ... stehen sollte.

    Nein. AFAIK kann man kein Array übergeben und ein String geht dann auch nicht, da dann '...' geschrieben werden würde.

    Da könntest Du ausnahmsweise anstelle von @para bspw. {0} schreiben und dann mit

      String.Format( <SqlStatement>, String.Join( ","c, MeineWerte ) )

    die Werte einsetzen.

    Hierbei muss dann aber explizit darauf geachtet werden, dass sämtliche einzelnen Werte auf eine ggfs. bestehende SQL Injection Problematik hin geprüft wurden.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert dot-org Mittwoch, 13. April 2011 12:01
    Montag, 11. April 2011 15:21
    Moderator
  • Einen Parameter vom Typ Menge oder Array gibt es meines Wissens und laut http://softwareblog.morlok.net/2008/09/11/adonet-parameters-for-use-with-the-sql-in-keyword/ nicht. Mit der Syntax

      IN (@para)

    kannst du also nur einen einzelnen Wert wie 1 oder 'gelb' an den Parameter übergeben. Oder halt mehrere Parameter benutzen, aber dadurch ist die Zahl der Werte dann festgelegt.


    MVP Data Platform Development My blog
    • Als Antwort markiert dot-org Mittwoch, 13. April 2011 12:01
    Montag, 11. April 2011 15:23
  • Hallo

    und Danke für die Antworten.

    D.h. muss man hier entweder auf die leistungsstarke SQl-Syntax mit "IN (,,)" verzichten oder wieder die SQL-Queries von Hand zusammenpusseln. 

    Schade eigentlich ...

    • Als Antwort markiert dot-org Mittwoch, 13. April 2011 11:51
    Mittwoch, 13. April 2011 11:51

Alle Antworten

  • Einzelne Werte sollten als Parameter übergeben werden können, also etwa

      IN (@p1, @p2)

    Reicht dir das? Oder willst du eine ganze Menge von Daten vergleichen?


    MVP Data Platform Development My blog
    Montag, 11. April 2011 14:50
  • Hallo Martin,

    ich würde gerne formulieren: "SELECT a FROM c WHERE e IN (@para)", wobei @para für 1 oder 1,34,22 oder ... stehen sollte.

    Ist das möglich?

    Montag, 11. April 2011 15:04
  • Hi,
    ich würde gerne formulieren: "SELECT a FROM c WHERE e IN (@para)", wobei @para für 1 oder 1,34,22 oder ... stehen sollte.

    Nein. AFAIK kann man kein Array übergeben und ein String geht dann auch nicht, da dann '...' geschrieben werden würde.

    Da könntest Du ausnahmsweise anstelle von @para bspw. {0} schreiben und dann mit

      String.Format( <SqlStatement>, String.Join( ","c, MeineWerte ) )

    die Werte einsetzen.

    Hierbei muss dann aber explizit darauf geachtet werden, dass sämtliche einzelnen Werte auf eine ggfs. bestehende SQL Injection Problematik hin geprüft wurden.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert dot-org Mittwoch, 13. April 2011 12:01
    Montag, 11. April 2011 15:21
    Moderator
  • Einen Parameter vom Typ Menge oder Array gibt es meines Wissens und laut http://softwareblog.morlok.net/2008/09/11/adonet-parameters-for-use-with-the-sql-in-keyword/ nicht. Mit der Syntax

      IN (@para)

    kannst du also nur einen einzelnen Wert wie 1 oder 'gelb' an den Parameter übergeben. Oder halt mehrere Parameter benutzen, aber dadurch ist die Zahl der Werte dann festgelegt.


    MVP Data Platform Development My blog
    • Als Antwort markiert dot-org Mittwoch, 13. April 2011 12:01
    Montag, 11. April 2011 15:23
  • Hallo

    und Danke für die Antworten.

    D.h. muss man hier entweder auf die leistungsstarke SQl-Syntax mit "IN (,,)" verzichten oder wieder die SQL-Queries von Hand zusammenpusseln. 

    Schade eigentlich ...

    • Als Antwort markiert dot-org Mittwoch, 13. April 2011 11:51
    Mittwoch, 13. April 2011 11:51