SQL Platzhalter, in DENEN IN Frage, eingefügte Zeichenfolgen scheitern

Als Teil meines jobs, ich brauche, schreibt SQL-Abfragen, um eine Verbindung zu unserem PI-Datenbank. Zum generieren einer Abfrage, die ich brauche, um eine array von tags (im wesentlichen Primärschlüssel), aber diese müssen eingefügt werden als strings.

Werden, es wird eine modulare Abfrage und für mehrere tags, ein Platzhalter verwendet wird.

Die Abfrage stützt sich auf die Verwendung der WHERE-IN-Anweisung, die ist, wo der Platzhalter ist, wie unten:

SELECT SUM(value * 5/1000) as "Hourly Flow [kL]" 
  FROM piarchive..pitotal 
 WHERE tag IN (?) 
   AND time between ? and ? 
   AND timestep = '1d' 
   AND calcbasis = 'Eventweighted' 
   AND value <> ''

Das Problem ist das format, in dem die tags übergeben werden. Wenn ich Sie direkt in die Abfrage (für die Prüfung), gehen Sie auf format (dies sind beispielsweise zahlen): '000000012','00000032','005050236','4560236'
und die Abfrage sieht so aus:

SELECT SUM(value * 5/1000) as "Hourly Flow [kL]" 
  FROM piarchive..pitotal 
 WHERE tag IN ('000000012','00000032','005050236','4560236') 
   AND time between ? and ? 
   AND timestep = '1d' 
   AND calcbasis = 'Eventweighted' 
   AND value <> '' 

...und die funktioniert auch.

Wenn ich versuchen, und fügen Sie die gleichen tags in den Platzhalter ein, schlägt die Abfrage fehl. Wenn ich nur noch 1 tag, ohne Anführungszeichen (mit dem Platzhalter), die Abfrage funktioniert.

Warum ist das passiert? Ist es überhaupt um ihn herum?

Für welche Datenbank? Dynamische IN-Klauseln erfordern eine dynamische SQL-oder eine Funktion zum konvertieren der IN-Klausel in eine Tabelle, um die Ecke.
Es ist für die PI-Datenbank, die von OSIsoft. Es ist nicht wirklich eine relationale DB, aber der OLEDB-Treiber erlaubt die Verwendung von normalen SQL
Pitts: Wenn es keine native dynamic SQL-Unterstützung in PI können Sie erstellen Sie die Abfrage als string, was in der Sprache der Anwendung, die Sie verwenden.

InformationsquelleAutor Alastair Pitts | 2010-03-15

Schreibe einen Kommentar