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 は、内部結合での使用されていない構文を示します。
例 2 は、現在の構文を使用するように例 1 を更新する方法を示します。
例 3 は、左外部結合での使用されていない構文を示します。
例 4 は、現在の構文を使用するように例 2 を更新する方法を示します。
例 5 は、右外部結合での使用されていない構文を示します。
例 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]