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