Dans un projet, je travaille actuellement, j'ai besoin d'accéder à 2 bases de données de Linq de la manière suivante: p>
Je reçois une liste de tous les numéros de voyage entre une plage de dates spécifiée de DB1 et stockez ceci comme liste de «longues» valeurs p> li>
J'exécute une interrogation approfondie avec beaucoup de jointures sur DB2, mais seulement la recherche de voyages qui ont leur numéro de voyage inclus dans la liste ci-dessus. p> li> ol>
Problème est que la liste de déplacement de DB1 retourne souvent plus de 2100 articles - et je sais bien sûr la limite de paramètres de 2100 dans SQL, ce qui entraîne l'échec de ma deuxième requête. Je cherche des moyens de voir cela, tels que décrit ici A>, mais cela a pour effet de changer essentiellement ma requête en linq-to-objets, ce qui provoque de nombreux problèmes avec mes jointures p>
Y a-t-il d'autres solutions de contournement que je peux faire? p>
3 Réponses :
Vous pouvez diviser votre requête ou utiliser une table temporaire dans la base de données2 remplie de résultats de la base de données1. P>
Alors que LINQ-TO-SQL peut appeler des Procs stockés, vous pourriez P>
ou télécharger toutes les valeurs sur une table TEMP vous-même et rejoignez cette table. P>
Cependant, vous devriez peut-être repenser le problème: p>
Merci, l'idée de la table Temp est fantastique et fonctionne parfaitement. La seule inquiétude que j'ai eu d'avoir des utilisateurs concurrents utilisant le système à la fois peut causer des problèmes, même si j'ai une idée de stocker le nom d'utilisateur de l'utilisateur avec le numéro de voyage dans la table temporaire
@chris, "Les tableaux temporaires locaux sont visibles uniquement dans la session en cours", car il existe une session différente pour chaque connexion ADO.NET, vous devez être correct avec une "table temporaire locale".
Vous ne savez pas si cela aidera, mais j'ai eu un problème similaire pour une requête unique que j'écris à Linqpad et que vous avez fini de définir et d'utiliser une table temporaire comme celle-ci. L'utilisation est quelque chose comme p> } p> dans mon cas, la table temporaire n'avait qu'une colonne INT, mais vous devriez être capable de définir la colonne (s ) Tapez que vous voulez (tant que vous avez une clé primaire). P> P>
Impossible de retourner un ensemble de résultats au lieu de 2100 paramètres ???
Avez-vous envisagé de lotter l'opération d'insertion?
Il y a une solution à l'aide d'un seul paramètre XML dans Ce problème Connect . Mais je suis d'accord avec Guillame - vous devez coordonner cela entre les deux bases de données si vous le pouvez.
[Mode sarcastique sur] Vous pouvez utiliser SQLCE; P n'est pas une telle limite là-bas :)