SR0010: Avoid using deprecated syntax when you join tables or views (テーブルまたはビューの結合時には、使用されていない構文の使用を避けてください)

規則 ID

SR0010

分類

Microsoft.Design

互換性に影響する変更点

なし

原因

テーブルおよびビューの間の 1 つ以上の結合で、現在の構文ではなく、現在は使用されていない構文 (WHERE 句での =、*=、=* など) が使用されています。

規則の説明

使用されていない構文を使用する結合は、次の 2 つの項目に分類されます。

  • 内部結合
    内部結合の場合、結合されている列内の値が、=、<、>= などの比較演算子を使用して比較されます。 内部結合では、各テーブルの少なくとも 1 つの行が結合条件と一致する場合に行を返します。

  • 外部結合
    外部結合では、対象となる行がいずれかの WHERE または HAVING 検索条件と一致する限り、FROM 句で指定されたテーブルまたはビューの少なくとも 1 つからすべての行を返します。 *= または =* を使用して外部結合を指定した場合は、使用されていない構文を使用したことになります。

違反の修正方法

内部結合での違反を修正するには、このトピックの後半で紹介する例のように、INNER JOIN 構文を使用します。 詳細については、Microsoft Web サイトの「内部結合の使用」を参照してください。

外部結合での違反を修正するには、このトピックの後半で紹介する例のように、適切な OUTER JOIN 構文を使用します。 次のオプションがあります。

  • LEFT OUTER JOIN または LEFT JOIN

  • RIGHT OUTER JOIN または RIGHT JOIN

    注意

    Transact-SQL は FULL OUTER JOIN と FULL JOIN をサポートしますが、この種類の結合には以前の構文はありません。

詳細については、Microsoft Web サイトの「外部結合の使用」を参照してください。

警告を抑制する状況

この警告は抑制しないでください。 使用されていない構文は SQL Server の将来のリリースでは機能しない可能性があるため、すべてのインスタンスを修正する必要があります。

使用例

6 つの例は次のオプションを示しています。

  1. 例 1 は、内部結合での使用されていない構文を示します。

  2. 例 2 は、現在の構文を使用するように例 1 を更新する方法を示します。

  3. 例 3 は、左外部結合での使用されていない構文を示します。

  4. 例 4 は、現在の構文を使用するように例 2 を更新する方法を示します。

  5. 例 5 は、右外部結合での使用されていない構文を示します。

  6. 例 6 は、現在の構文を使用するように例 5 を更新する方法を示します。

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

参照

概念

データベース コードの分析によるコードの品質の向上