Question

Je suis en train de trouver un moyen d'interroger des lignes de données à l'aide d'un « multivaleur » colonne délimité par des tuyaux dans une autre table comme une clause WHERE. SQL Server 2005

Ceci est ma meilleure description du problème:

Imaginez un tuyau colonne délimité réglé à une variable comme @LIST = 'Bob | Mary | Joe'

alors je suis en train de trouver un match comme celui-ci

Select * from Users where FirstName = 'Joe'

mais étendue à être

Select * from Users where FirstName "IS CONTAINED IN" @List

qui renverrait toutes les entrées Bob, Mary et Joe. Merci pour votre aide.

Était-ce utile?

La solution

Vous pouvez utiliser un udf split et le joindre à votre requête principale. voir cette pour le code et un exemple. Votre requête finirait par ressembler à cela. Ce n'est pas testé mais nous espérons que cela vous fait dans la bonne direction.

Select A.* from Users A JOIN dbo.Fn_Split(@ValueArrayString, '|') B on A.FirstName = B.value 

Autres conseils

Qu'en est-

Select * from Users where CHARINDEX(FirstName + '|', @List + '|') > 0

Un peu ennuyeux que vous devez ajouter le tuyau à delimiter les deux chaînes, mais il fonctionne, et il est probablement plus rapide qu'une fonction.

J'aime la solution de MrTelly. Cependant, il est seulement en prenant soin de la moitié des faux positifs. La solution complète est la suivante:

Select * from Users where CHARINDEX('|' + FirstName + '|', '|' + @List + '|') > 0

Le tuyau doit être ajouté aux deux extrémités

Consultez la fonction PATINDEX (). Il est un peu limité, mais il devrait faire ce que vous cherchez.

Voir udf ___ Txt_SplitTab de Andrew Novick

Select * from Users where FirstName IN (Select Item From udf_Txt_SplitTAB (@LIST, '|'))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top