SR0007: Utilizzare ISNULL(colonna, valore predefinito) nelle colonne che ammettono i valori null nelle espressioni

RuleId

SR0007

Category

Microsoft.Performance

Breaking Change

Non sostanziale

Causa

Una funzione ISNULL non è stata utilizzata in un'espressione di confronto in cui una colonna poteva contenere un valore NULL.

Descrizione della regola

Se il codice confronta due valori NULL o un valore NULL con qualsiasi altro valore, il codice restituirà un risultato sconosciuto.

Come correggere le violazioni

È necessario indicare in modo esplicito come gestire valori NULL in espressioni di confronto eseguendo il wrapping di ogni colonna che può contenere un valore NULL in una funzione ISNULL.

Esclusione di avvisi

Poiché i risultati del confronto non sono definiti, non è necessario eliminare questo avviso.

Esempio

In questo esempio vengono illustrate una semplice definizione della tabella e due stored procedure. La tabella contiene una colonna, [c2], che può contenere un valore NULL. La prima routine, [ProcedureWithWarning], confronta [c2] con un valore costante. La seconda routine corregge il problema eseguendo il wrapping [c2] con una chiamata alla funzione ISNULL.

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

Vedere anche

Concetti

Analisi del codice di database per migliorare la qualità del codice