Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 什么';基于值列表查询数据库的最有效方法是什么?_Tsql_Sql Server 2008 - Fatal编程技术网

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

Tsql 什么';基于值列表查询数据库的最有效方法是什么?,tsql,sql-server-2008,Tsql,Sql Server 2008,我有一个要从Sql Server检索的记录Id列表。我想知道做这件事最有效的方法是什么。例如,在代码中,我有: var recordsToFind = new List<long>{ 12345, 12346, 45756, 42423 ... } 我知道有几个选项,比如,表值参数,将列表转换为逗号分隔的字符串,使用CharIndex,创建临时表和拆分字符串等等 记住这一点,最好的方法是什么?这将被大量使用 谢谢 关于这方面的几篇必读文章可以在这里找到:这些文章介绍了性能注意事项。

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

var recordsToFind = new List<long>{ 12345, 12346, 45756, 42423 ... }
我知道有几个选项,比如,表值参数,将列表转换为逗号分隔的字符串,使用CharIndex,创建临时表和拆分字符串等等

记住这一点,最好的方法是什么?这将被大量使用


谢谢

关于这方面的几篇必读文章可以在这里找到:这些文章介绍了性能注意事项。

关于这方面的几篇必读文章可以在这里找到:这些文章介绍了性能注意事项。

Micah

是否不可能只执行简单的sql“in()”函数??(显然,您的数组被用作参数,而不是硬编码的值)

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

[edit]-我注意到这是在.net中使用的。有可能对数据库使用linq吗??如果是这样的话,那么一些精心设计的linq(例如超EF或亚音速)方法可能会奏效。例如:

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

是否不可能只执行简单的sql“in()”函数??(显然,您的数组被用作参数,而不是硬编码的值)

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

[edit]-我注意到这是在.net中使用的。有可能对数据库使用linq吗??如果是这样的话,那么一些精心设计的linq(例如超EF或亚音速)方法可能会奏效。例如:

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

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

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

如果我的语法不正确,我道歉。不幸的是,我的工作使用的是Oracle,而我已经8个月没有经常使用SQL Server了。希望这有帮助。

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

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

如果我的语法不正确,我道歉。不幸的是,我的工作使用的是Oracle,而我已经8个月没有经常使用SQL Server了。希望这有帮助。

+1获取链接。该网站包含几篇关于sql server的非常有趣的文章。该网站包含几篇关于sql server的非常有趣的文章。我需要传入代码中的值列表。它们不是硬编码的,我也不是在执行我需要从代码中传入值列表的直接sql(或动态sql)。它们不是硬编码的,我也不是在执行直接sql(或动态sql)