SR0015: Extraer las llamadas de función deterministas de predicados WHERE
Identificador de regla |
SR0015 |
Categoría |
Microsoft.Performance |
Cambio problemático |
Poco problemático |
Causa
Un predicado WHERE contiene una o más llamadas de función deterministas.
Descripción de la regla
En un predicado WHERE, una llamada de función es determinista si su valor no depende de los datos seleccionados. Tales llamadas podrían producir recorridos de tabla innecesarios que reducen el rendimiento de la base de datos.
Cómo corregir infracciones
Para resolver este problema, puede asignar el resultado de la llamada a una variable que utilice en el predicado WHERE.
Cuándo suprimir advertencias
Podría suprimir esta advertencia si la tabla o las tablas a las que hace referencia el predicado WHERE nunca contendrán más que unas pocas filas.
Ejemplo
En el primer ejemplo, el procedimiento almacenado incluye una llamada de función determinista, ABS(@param1), en el predicado WHERE. En el segundo ejemplo, una variable temporal contiene el resultado de la llamada.
CREATE PROCEDURE [dbo].[Procedure2WithWarning]
@param1 INT = 0,
AS
BEGIN
SELECT [c1], [c2], [c3], [SmallString]
FROM [dbo].[Table1]
WHERE [c2] > ABS(@param1)
END
CREATE PROCEDURE [dbo].[Procedure2Fixed]
@param1 INT = 0,
AS
BEGIN
DECLARE @AbsOfParam1 INT
SET @AbsOfParam1 = ABS(@param1)
SELECT [c1], [c2], [c3], [SmallString]
FROM [dbo].[Table1]
WHERE [c2] > @AbsOfParam1
END
Vea también
Conceptos
Analizar el código de base de datos para mejorar la calidad del código