SR0015: WHERE 조건자에서 확정적 함수 호출을 추출합니다.

규칙 ID

SR0015

범주

Microsoft.Performance

변경 수준

주요 변경 아님

원인

WHERE 조건자에는 하나 이상의 확정적 함수 호출이 포함되어 있습니다.

규칙 설명

WHERE 조건자의 함수 호출은 값이 선택한 데이터에 종속되어 있는지 결정합니다. 이러한 호출은 데이터베이스 성능을 저하시키는 불필요한 테이블 스캔을 초래합니다.

위반 문제를 해결하는 방법

이 문제를 해결하려면 호출 결과를 WHERE 조건자에 사용하는 변수에 할당할 수 있습니다.

경고를 표시하지 않는 경우

테이블 또는 WHERE 조건자가 참조하는 테이블에 몇 개의 행이 포함되지 않는 경우 이 경고를 표시하지 않을 수 있습니다.

예제

첫 번째 예제에서 저장된 프로시저는 WHERE 조건자의 확정적 함수 호출, ABS(@param1)를 포함합니다. 두 번째 예제에서 임시 변수는 호출 결과를 저장합니다.

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

참고 항목

개념

데이터베이스 코드를 분석하여 코드 품질 향상