SR0010: Évitez d'utiliser une syntaxe déconseillée lorsque vous joignez des tables ou des vues

Id de la règle

SR0010

Catégorie

Microsoft.CSharp

Modification avec rupture

Modification sans rupture

Cause

Une ou plusieurs jointures entre les tables et les vues utilisent la syntaxe déconseillée (telle que =, * =, ou = * dans une clause WHERE) au lieu de la syntaxe actuelle.

Description de la règle

Les jointures qui utilisent la syntaxe déconseillée sont réparties dans deux catégories :

  • Jointure interne
    Pour une jointure interne, les valeurs dans les colonnes jointes sont comparées en utilisant un opérateur de comparaison tel que =, <, > =, etc.. Les jointures internes retournent des lignes uniquement si au moins une ligne de chaque table correspond à la condition de jointure.

  • Jointure externe
    Les jointures externes retournent toutes les lignes d'au moins l'une des tables ou vues spécifiées dans la clause FROM, tant que ces lignes sont conformes à une condition de recherche WHERE et HAVING. Si vous utilisez * = ou = * pour spécifier une jointure externe, vous utilisez une syntaxe déconseillée.

Comment corriger les violations

Pour résoudre une violation dans une jointure interne, utilisez la syntaxe INNER JOIN, comme le montre l'exemple proposé plus loin dans cette rubrique. Pour plus d'informations, consultez cette page sur le site Web Microsoft : Utilisation des jointures internes.

Pour résoudre une violation dans une jointure externe, utilisez la syntaxe OUTER JOIN appropriée, comme le montrent les exemples proposés plus loin dans cette rubrique. Vous pouvez choisir parmi les options suivantes :

  • JOINTURE EXTERNE GAUCHE ou JOINTURE GAUCHE

  • JOINTURE EXTERNE DROITE ou JOINTURE DROITE

    Notes

    Transact-SQL prend en charge JOINTURE OUTER COMPLÈTE et JOINTURE COMPLÈTE, mais ce type de jointure n'avait aucune syntaxe précédente.

Pour plus d'informations, consultez cette page sur le site Web Microsoft: À l'aide Jointures externes.

Quand supprimer les avertissements

Vous ne devez pas supprimer cet avertissement. Vous devez corriger toutes les instances car la syntaxe déconseillée risque de ne pas fonctionner dans les versions ultérieures de SQL Server.

Exemple

Les six exemples montrent les options suivantes :

  1. L'exemple 1 montre la syntaxe déconseillée pour une jointure interne.

  2. L'exemple 2 montre comment vous pouvez mettre à jour l'exemple 1 pour utiliser la syntaxe actuelle.

  3. L'exemple 3 montre la syntaxe déconseillée pour une jointure externe gauche.

  4. L'exemple 4 montre comment vous pouvez mettre à jour l'exemple 2 pour utiliser la syntaxe actuelle.

  5. L'exemple 5 montre la syntaxe déconseillée pour une jointure externe droite.

  6. L'exemple 6 montre comment vous pouvez mettre à jour l'exemple 5 pour utiliser la syntaxe actuelle.

-- 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]

Voir aussi

Concepts

Analyse du code de base de données pour en améliorer la qualité