代码之家  ›  专栏  ›  技术社区  ›  Micah

基于值列表查询数据库最有效的方法是什么?

  •  1
  • Micah  · 技术社区  · 14 年前

    我有一个要从Sql Server检索的记录Id列表。我在想最有效的方法是什么。例如,在代码中,我有:

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

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

    我知道有几个选项,比如,表值参数,将列表转换成逗号分隔的字符串,使用CharIndex,创建临时表和拆分字符串等等。。。

    3 回复  |  直到 14 年前
        1
  •  5
  •   SQLMenace    14 年前

    http://www.sommarskog.se/arrays-in-sql.html 这些文章讨论了性能方面的考虑。

        2
  •  0
  •   XstreamINsanity    14 年前

    您是否有能力更改代码和存储过程,或者您是否受到某种限制?如果你有能力同时改变这两种情况,我以前见过这种情况:

    //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)
    

        3
  •  0
  •   jim tollan    14 年前

    弥迦,

    仅仅执行简单的sql'in()'函数是不可能的吗(显然,数组被用作参数,而不是硬编码的值)

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

    也许我误解了这个问题(请注意:)

    [ 编辑

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