【发布时间】:2016-07-13 13:31:05
【问题描述】:
我在stored procedures 之一中使用过query
SELECT officeid, rdate
FROM dbo.mytable
Where OfficeID = OfficeID
AND YEAR(h.rDate) = @year
AND MONTH(h.rDate) BETWEEN 1 AND 4
由于在Where clause 中使用了函数MONTH 和YEAR,上述查询无法成为SARG ( Search Argument)。这会在stored procedure 执行期间导致Index scan。有没有办法重写上面的查询来处理上面的逻辑(不带function)
(注:rdate 是 datetime 日期类型,@year 是 INT 数据类型)
【问题讨论】:
-
您可以更改参数吗?如果您可以传入日期参数而不是 int,将会简单得多。当然,它仍然可以完成,但传递一个日期要干净得多。
-
实际上没有在 SSRS 报告中使用此存储过程。 @year 参数来自年份组合
标签: sql sql-server tsql stored-procedures sql-server-2012