SR0007: 식의 null 허용 열에 ISNULL(column, default_value)을 사용합니다.
규칙 ID |
SR0007 |
범주 |
Microsoft.Performance |
변경 수준 |
주요 변경 아님 |
원인
열에 NULL 값을 포함할 수 있는 비교 식에는 ISNULL 함수가 사용되지 않았습니다.
규칙 설명
코드가 두 NULL 값 또는 한 NULL 값을 다른 값과 비교하는 경우 코드는 알 수 없는 결과를 반환합니다.
위반 문제를 해결하는 방법
ISNULL 함수에 NULL 값을 포함할 수 있는 각 열을 래핑하여 비교 식에서 NULL 값을 처리하는 방법을 명시적으로 표시해야 합니다.
경고를 표시하지 않는 경우
비교 결과가 비활성화된 상태이므로 이 경고를 표시해야 합니다.
예제
이 예제에서는 간단한 테이블 정의 및 두 개의 저장된 프로시저를 보여 줍니다. 테이블은 NULL 값을 포함할 수 있는 열, [c2]를 포함합니다. 첫 번째 절차인 [ProcedureWithWarning]는 [c2]를 상수 값과 비교합니다. 두 번째 절차에서는 ISNULL 함수를 호출하여 [c2] 래핑함으로써 문제를 해결합니다.
CREATE TABLE [dbo].[Table1]
(
[ID] INT NOT NULL IDENTITY(0, 1),
[c1] INT NOT NULL PRIMARY KEY,
[c2] INT
)
ON [PRIMARY]
CREATE PROCEDURE [dbo].[ProcedureWithWarning]
AS
BEGIN
SELECT COUNT(*) FROM [dbo].[Table1]
WHERE [c2] > 2;
END
CREATE PROCEDURE [dbo].[ProcedureFixed]
AS
BEGIN
SELECT COUNT(*) FROM [dbo].[Table1]
WHERE ISNULL([c2],0) > 2;
END