2010-08-18 4 views
1

J'ai une liste d'ID d'enregistrement que je veux récupérer depuis Sql Server. J'essaie de comprendre quelle serait la façon la plus efficace de le faire. Par exemple, dans le code, j'ai ceci:Quel est le moyen le plus efficace d'interroger la base de données en fonction d'une liste de valeurs?

var recordsToFind = new List<long>{ 12345, 12346, 45756, 42423 ... } 

Je veux créer un proc stocké qui fait cela:

Select * From Puzzles where ID = {any of the integers passed in} 

Je sais qu'il ya plusieurs options comme, paramètres de valeur de la table, la conversion de la liste en chaîne séparée par des virgules et en utilisant CharIndex, créé une table temporaire et la séparation de la chaîne etc ...

Quelle serait la meilleure approche en gardant à l'esprit que cela sera utilisé BEAUCOUP!

Merci!

Répondre

0

Micah,

est-il de la question il suffit de faire le sql simple 'dans()' fonction ?? (Avec évidemment votre réseau étant utilisé comme paramètre, plutôt que les valeurs codées en dur)

select * From Puzzles where ID in (12345, 12346, 45756, 42423) 

peut-être que j'ai mal compris l'esprit de question que vous :)

[modifier ] - je remarque que ce étant utilisé dans .net. serait-il possible d'utiliser linq contre la base de données? si c'est le cas, alors quelques méthodes linq (EF ou subsonique par exemple) bien conçues peuvent faire l'affaire. par exemple:

var idlist = new int[] { 12345, 12346, 45756, 42423 }; 
var puzzleids = Puzzles.Where(x => 
         idlist.Contains(x.ID)); 
+0

Je dois passer dans la liste des valeurs du code. Ils ne sont pas codés en dur, et je n'exécute pas SQL direct (ou SQL dynamique) – Micah

0

Avez-vous la possibilité de modifier le code et la procédure stockée ou êtes-vous limité? Si vous avez la possibilité de changer les deux, j'ai déjà vu ceci:

//Convert array/list to a comma delimited string using your own function (We'll call string strFilter) 
//Pass strFilter into stored procedure (varchar(1000) maybe, we'll call parameter @SQLFILTER) 

DECLARE @SQL AS VARCHAR(2000) --Or VARCHAR(MAX) 
SET @SQL = "SELECT * FROM PUZZLES WHERE ID IN (" + @SQLFILTER + ")" 
EXEC (@SQL) 

Je m'excuse si ma syntaxe est désactivée. Mon travail utilise malheureusement Oracle et je n'ai pas beaucoup utilisé SQL Server en 8 mois. J'espère que cela t'aides.

Questions connexes