SQL SELECT WHERE值IN('巨大的值列表')

时间:2011-11-08 07:52:28

标签: sql linq sql-server-2005

注意:C#3.5应用程序在远程服务器上调用SQL Server 2005数据库。

我正在制定两个步骤。

1)我在Windows索引服务中搜索包含给定单词的文件列表,例如“Bob”。

2)然后,我需要通过传入索引服务中的文件名列表,从SQL DB中的DOCUMENT表中检索行列表。

目前,我从索引服务和DOCUMENT表中的所有行检索列表,然后在代码中过滤它们。这是不切实际的,因为有10,000多个文档,而数据库是通过防火墙的。

我考虑过创建一个查询,例如:

SELECT DocName FROM Documents WHERE DocName IN({索引服务中的文件列表})

...但鉴于文件列表可能是数千个,它将无效。

那么,我能做的最好的事情是什么?我不想查询所有10,000多行的数据库并将它们传回防火墙(需要10分钟)。我不知何故需要传入从索引服务中检索的文件名列表。

linq如何在这种情况下工作?

任何建议都非常感谢。

3 个答案:

答案 0 :(得分:3)

如果你有SQL Server 2008,你可以使用Table Valued Parameters,但对于2005年,没有什么比这更优雅了。

我能想到的最简单的解决方案是:

  • 在数据库中创建表格
  • 批量将索引服务的结果插入表格
  • 将您的查询加入此表以过滤结果
  • 检索filered结果

这不是一个很好的解决方案,但我不知道存在一个很好的解决方案 - 这就是创建TVP的原因。

答案 1 :(得分:0)

您可以为这种"大规模"评估不同的解决方案。操作,可能没有必要使用linq。例如,尝试在SQL Server上实现一个存储过程,它在输入中接收文件名列表并返回文档列表。

答案 2 :(得分:0)

我选择了类似于Bazzz提到的解决方案。

我已经设置了一个夜间操作来复制数据库中的必填字段,并在文档文件(PDF)上设置元标记。然后可以在索引服务中使用元数据; o)

对于这个实例来说,事实证明这是一个很好的解决方案,但是Hallainzil所说的最好的选择虽然在Sql Server 2005上是痛苦的。