Frapper le 2100 limite de paramètre (SQL Server) lors de l'utilisation de Contains()

from f in CUSTOMERS
where depts.Contains(f.DEPT_ID)
select f.NAME

depts est une liste (IEnumerable<int>) du ministère de l'ids

Cette requête fonctionne très bien jusqu'à ce que vous passez une grande liste (disons, autour de 3000 dept id) .. alors, j'obtiens cette erreur:

Les entrants (tabular data stream) appel de procédure distante (RPC) du protocole de flux est incorrect. Trop de paramètres ont été fournis dans cette demande de RPC. Le maximum est de 2100.

J'ai changé ma requête à:

var dept_ids = string.Join(" ", depts.ToStringArray());
from f in CUSTOMERS
where dept_ids.IndexOf(Convert.ToString(f.DEPT_id)) != -1
select f.NAME

à l'aide de IndexOf() correction de l'erreur, mais fait la requête lente. Est-il un autre moyen pour résoudre ce problème? merci beaucoup.

  • Que diriez - comme (dont les lots en morceaux maniables). Les autres (non-LINQ) options CSV et un "split" de l'UDF, et la table des paramètres (dans SQL2008).
  • Marque, pouvez-vous nous expliquer quelle est la meilleure alternative à contain si j'ai des divers paramètres de compter de 1 à 2000? Je sais que cela créer des tas de plans en db, mais il semble que l'utilisation de la like <input parameter> '%<search field>%' prendra même plus la ressource de base de données en temps. Que dois-je utiliser?
  • Le 2100 paramètre le problème de la limite n'existe pas dans le Cadre de l'Entité: stackoverflow.com/questions/8898564/...
  • avez-vous essayé une solution? pas marqué aucun
  • Qu'en est-il de la recherche pour DEPT_id quand est égal à 1, trouverez tout les id 1 dans n'importe quel chiffre! Ai-je raté quelque chose?
InformationsquelleAutor ban-G | 2009-03-17