Benutzer mit den meisten Antworten
SQL-Query mit WHERE customer IN (1,3,5) mit SQL Parametern

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?
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
-
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
-
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
Alle 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
-
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
-
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