0
考虑下面的代码:条件凡在SQL语句使用索引扫描而不是索引查找
DECLARE @TaskId int;
SET @TaskId = 594725;
SELECT Report.Amount FROM Report WHERE Report.TaskId = @TaskId;
SELECT Report.Amount FROM Report WHERE (@TaskId = -1 OR Report.TaskId = @TaskId);
我有表报告非聚集索引与列的taskid索引。 第一SELECT使用与INDEX索引SEEK但第二个回退到一个INDEX SCAN由于@TaskId变量的条件检查。有没有什么办法可以进行条件检查(例如,如果@TaskId是一个过滤器,并且-1应该返回所有行)并且仍然使查询使用一个INDEX SEEK?
谢谢,是的,它的作品。但是如果我有例如10个变量都需要进行条件检查(例如,将过滤器作为存储过程的报告),那么代码就会失去控制。 – brunnsbe 2010-11-23 12:02:59