2009-02-26 4 views
3

Imaginez une table avec des GUID comme clé primaire. Je voudrais sélectionner quelques-unes de ces lignes en fonction de leur clé primaire. Je voudrais utiliser une requête comme:Est-il possible d'utiliser des paramètres de requête pour remplir le mot clé IN

SELECT * FROM mytable WHERE id IN ('firstguidhere','secondguidhere'); 

J'utilise ADO.NET pour interroger la base de données, donc je voudrais utiliser une requête au lieu de paramétrisé sql dynamique, qui fonctionnerait évidemment, mais je veux Conserver les avantages des requêtes paramétrées (sécurité, échappement, etc ...).

Est-il possible de remplir la collection pour la clause IN en utilisant les paramètres sql?

+0

Il y a une double question ici quelque part ... le trouver ... –

+1

http: // stackoverflow.com/questions/337704/parameterizing-a-sql-in-clause –

+0

@Jon, La réponse acceptée à cette question n'est pas vraiment optimale, même si c'est un hack que j'ai utilisé plusieurs fois moi-même, et ça irait bien pour les petites tables et/ou les requêtes peu fréquentes. – LukeH

Répondre

5

Vous pouvez transmettre la liste des GUID en tant que paramètre de chaîne séparés par des virgules et utiliser une UDF valeur de table pour les diviser en une table à utiliser dans votre clause IN:

SELECT * 
FROM my_table 
WHERE id IN (SELECT id FROM dbo.SplitCSVToTable(@MyCSVParam)) 

Erland Sommarskog a un interesting article avec des exemples de la manière de diviser les chaînes séparées par des virgules en tables à l'aide d'un fichier UDF.

(Pour des raisons de performance, vous devez vous assurer que votre UDF est la table inline, plutôt que plusieurs instructions.)

+0

Récemment utilisé l'article de Sommarskog pour résoudre un problème similaire. A travaillé très bien pour nos besoins. – schooner