SR0010: Evitare l'utilizzo di sintassi deprecata durante l'unione di tabelle o visualizzazioni

RuleId

SR0010

Category

Microsoft.Design

Breaking Change

Non sostanziale

Causa

Uno o più join tra tabelle e visualizzazioni utilizzano sintassi deprecata (ad esempio =, * = o = * in una clausola WHERE) anziché la sintassi corrente.

Descrizione della regola

I join che utilizzano la sintassi deprecata rientrano in due categorie:

  • Inner join
    Per un inner join, i valori nelle colonne in fase di unione unendo vengono confrontati tramite un operatore di confronto, come =, <, >=, ecc. Gli inner join restituiscono righe solo se almeno una riga di ogni tabella corrisponde alla condizione del join.

  • Outer join
    Gli outer join restituiscono tutte le righe da almeno una delle tabelle o visualizzazioni specificate nella clausola FROM, a condizione che tali righe soddisfino condizioni di ricerca WHERE o HAVING. Se si utilizza * = o = * specificare un outer join, si utilizza una sintassi deprecata.

Come correggere le violazioni

Per correggere una violazione in un inner join, utilizzare la sintassi INNER JOIN, come illustrato nell'esempio riportato più avanti in questo argomento. Per ulteriori informazioni, vedere la pagina seguente nel sito Web Microsoft: Utilizzo di inner join (la pagina potrebbe essere in inglese).

Per correggere una violazione in un outer join, utilizzare la sintassi OUTER JOIN appropriata, come illustrato negli esempi riportati più avanti in questo argomento. Sono possibili le seguenti opzioni:

  • LEFT OUTER JOIN o LEFT JOIN

  • Right outer join o RIGHT JOIN

    Nota

    Transact-SQL supporta le espressioni FULL OUTER JOIN e FULL JOIN, ma il tipo di join non ha una sintassi precedente.

Per ulteriori informazioni, vedere la pagina seguente nel sito Web Microsoft: Utilizzo di outer join (la pagina potrebbe essere in inglese).

Esclusione di avvisi

Non escludere tale avviso. È necessario correggere tutte le istanze perché la sintassi deprecata potrebbe non funzionare in versioni successive di SQL Server.

Esempio

I sei esempi illustrano l'utilizzo delle seguenti opzioni:

  1. Nell'esempio 1 viene illustrata la sintassi deprecata di un inner join.

  2. Nell'esempio 2 viene illustrato come aggiornare l'esempio 1 per utilizzare la sintassi corrente.

  3. Nell'esempio 3 viene illustrata la sintassi deprecata di un left outer join.

  4. Nell'esempio 4 viene illustrato come aggiornare l'esempio 2 per utilizzare la sintassi corrente.

  5. Nell'esempio 5 viene illustrata la sintassi deprecata di un right outer join.

  6. Nell'esempio 6 viene illustrato come aggiornare l'esempio 5 per utilizzare la sintassi corrente.

-- Example 1: Deprecated syntax for an inner join
SELECT [T2].[c3], [T1].[c3] 
FROM [dbo].[Table2] T2, [dbo].[Table1] T1 
WHERE [T1].[ID] = [T2].[ID]

-- Example 2: Current syntax for an inner join
SELECT [T2].[c3], [T1].[c3] 
FROM [dbo].[Table2] AS T2
INNER JOIN [dbo].[Table1] as T1
ON [T2].[ID] = [T2].[ID]

-- Example 3: Deprecated syntax for a left outer join
SELECT [T2].[c3], [T1].[c3] 
FROM [dbo].[Table2] T2, [dbo].[Table1] T1 
WHERE [T1].[ID] *= [T2].[ID]

-- Example 4: Fixed syntax for a left outer join
SELECT [T2].[c3], [T1].[c3] 
FROM [dbo].[Table2] AS T2
LEFT OUTER JOIN [dbo].[Table1] as T1
ON [T2].[ID] = [T2].[ID]

-- Example 5: Deprecated syntax for a right outer join
SELECT [T2].[c3], [T1].[c3] 
FROM [dbo].[Table2] T2, [dbo].[Table1] T1 
WHERE [T1].[ID] =* [T2].[ID]

-- Example 6: Fixed syntax for a right outer join
SELECT [T2].[c3], [T1].[c3] 
FROM [dbo].[Table2] AS T2
RIGHT OUTER JOIN [dbo].[Table1] as T1
ON [T2].[ID] = [T2].[ID]

Vedere anche

Concetti

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