inner ejemplos datos consultas complejas agrupadas sql sql-server tsql stored-procedures sql-server-2012

ejemplos - Excluir funciones de la cláusula where en el servidor Sql



like sql (2)

Use comparaciones del rango de fechas. Por ejemplo,

SELECT officeid, rdate FROM dbo.mytable Where OfficeID = OfficeID --Filter by dates that are between January 1st, midnight, inclusive, and --May 1st, exclusive, in the desired year AND h.rDate >= Convert(DateTime,''1/1/'' + Convert(VarChar(4),@year)) AND h.rDate < Convert(DateTime,''5/1/'' + Convert(VarChar(4),@year))

He utilizado la query continuación en uno de mis stored procedures

SELECT officeid, rdate FROM dbo.mytable Where OfficeID = OfficeID AND YEAR(h.rDate) = @year AND MONTH(h.rDate) BETWEEN 1 AND 4

La consulta anterior no puede ser un SARG ( Search Argument) debido al uso de fuctions MONTH y YEAR en la Where clause . Esto lleva a la Index scan durante la ejecución del stored procedure . ¿Hay alguna forma de volver a escribir la consulta anterior para manejar la lógica anterior (sin function )

(PD: rdate es datetime datetype y @year es INT tipo de datos)


Use pseudo valores ..

Esta función siguiente es SARGABLE (pero será larga), ya que CAST (DATETIME to DATE) es SARAGABLE , por lo que se usará Index.

Ejemplo:

Cast(h.rDate as DATE) between datefromparts(@year,01,01) and datefromparts(@year,04,30)