【发布时间】:2012-07-19 22:35:43
【问题描述】:
我有一个查询,我想返回与值列表关联的所有行。你可以很简单地写成:
select * from TableA where ColumnB in (1, 2, 3, 5)
我可以在 C# 中生成这个查询并执行它。然而,这显然不太理想,因为它不使用参数,在尝试缓存查询计划时会受到影响,并且显然容易受到 SQL 注入攻击。
另一种方法是将其写为:
select * from TableA where ColumnB = @value
这可以由 C# 执行多次,但是这将导致 N 个 DB 命中。
我能看到的唯一另一种选择是创建一个临时表并以这种方式加入它,但是我不认为这一点,因为它会更复杂,并且会受到与第一个选项相同的限制。
我正在使用 SQL 服务器和 OLDB,创建查询不是问题。我正在尝试创建最有效的流程。
这三种方法中哪一种更有效?我错过了替代方案吗?
【问题讨论】:
-
你想如何执行查询? EF、LINQ、ADO、OLEDB?
-
那台服务器呢? MySql,MsSql,其他?
-
OLDB 和 MsSQL,问题已更新
-
你使用的是 sql2008 吗?我可以使用表值参数提供另一种方法
-
询问 SQL Server 问题时请指定 SQL Server 版本。这将防止人们花时间开发您无法使用的解决方案。
标签: c# sql sql-server performance sql-server-2008