SQL espace réservé dans la OÙ EN cause, les chaînes insérées échouer

Dans le cadre de mes emplois, j'ai besoin pour écrire des requêtes SQL pour vous connecter à notre PI base de données. Pour générer une requête, j'ai besoin de passer un tableau de tags (essentiellement des clés primaires), mais ceux-ci doivent être insérés comme des chaînes de caractères.

Que ce sera un système modulaire de requête et utilisé pour de multiples balises, un espace réservé est utilisé.

La requête s'appuie sur l'utilisation de la OÙ DANS l'énoncé, qui est où l'espace est, comme ci-dessous:

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 <> ''

Le problème est le format dans lequel les marques sont transmis en tant que. Si je les ajouter directement dans la requête (pour les tests), ils vont dans le format (ce sont des numéros par exemple): '000000012','00000032','005050236','4560236'
et la requête ressemble à:

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 <> '' 

...qui fonctionne.

Si j'essaie d'ajouter les balises dans l'espace réservé, la requête échoue. Si je n'ajoute 1 tag, pas de guillemets (en utilisant l'espace réservé), la requête fonctionne.

Pourquoi est-ce arrivé? Est-il de toute façon autour d'elle?

Pour ce qui de la base de données? Dynamique DANS les clauses besoin de l'aide de SQL dynamique, ou une fonction pour convertir la clause dans une table de jointure.
C'est pour le PI de la base de données, à partir d'OSIsoft. Ce n'est pas vraiment un relationnel, mais le pilote OLEDB permet l'utilisation de la normale SQL
Pitts: Si il n'y a pas natif SQL dynamique de soutien PI, vous pouvez construire la requête comme une chaîne de caractères dans quelle que soit la langue de l'application que vous utilisez.

OriginalL'auteur Alastair Pitts | 2010-03-15