2012-12-27 8 views
2

Possible en double:
Parameterizing an SQL IN clause?
Comma-separated value insertion In SQL Server 2005Passage de paramètres multiples à SQL Server

Je suis en train de chercher dans ma base de données en utilisant où la clause, mais ma chaîne est suivi format:

'233052,57516351,254689' 

Je dois faire une consultation dans ma base de données en utilisant la requête suivante:

SELECT * FROM myTable WHERE field IN (@list_string) 

Comment faire pour effectuer cette action?

+3

Quelle version de SQL Server utilisez-vous? Je suggère de lire [Tableaux et listes dans SQL Server] (http://www.sommarskog.se/arrays-in-sql.html), par Erland Sommarskog. – Oded

+0

J'utilise SQL Server 2008 – mcamara

+1

Alors [Paramètres Table-Valued] (http://msdn.microsoft.com/en-us/library/bb510489.aspx) sont le chemin à parcourir. – Oded

Répondre

0

Essayez exec concaténation instruction sql:

declare @sql varchar(200) 
set @sql='SELECT * FROM myTable WHERE field IN ('[email protected]_string+')' 
exec(@sql) 
+0

Sql Injection Construire une requête paramétrée Sélectionnez * from MyTable Où field = @ p1 [Ou field = @ p2] en utilisant le nombre de valeurs dans la liste, puis affecter les valeurs aux paramètres comme une option plus sûre –

+0

@Tony Je suis d'accord si la list_string est une donnée client, mais si la liste source list_string est sûre et déjà validée, cela sera –

+0

La requête prend plus de temps à analyser, car elle est plus longue, mais elle ne sera probablement pas longue à exécuter. s qui continue à perpétuer l'erreur d'injection sql. –

1

Je me sers Itai Goldstein's Split function depuis des années pour cette situation très. Vous pouvez ensuite effectuer les opérations suivantes:

SELECT * 
FROM [myTable] 
WHERE [field] IN (
    SELECT [Data] 
    FROM [dbo].[Split] (@list_string, ',') 
); 
+0

Bien, je m'en souviendrai. –

Questions connexes