SR0010:当联接表或视图时,避免使用已弃用的语法

规则 ID

SR0010

类别

Microsoft.Design

是否重大更改

非重大更改

原因

表和视图之间的一个或多个联接使用已弃用的语法(如 WHERE 子句中的 =、* = 或 = *) 而不是当前的语法。

规则说明

使用已弃用语法的联接分为两类:

  • 内部联接
    对于内部联接,使用比较运算符(如 =、<、> =,等等)比较要联接的列中的值。 只有当每个表中的至少一个行匹配联接条件,内部联接才返回行。

  • 外部联接
    外部联接从 FROM 子句中指定的至少一个表或视图中返回所有行,只要这些行符合任意 WHERE 或 HAVING 搜索条件。 如果您使用 *= 或 =* 来指定外部联接,则您正在使用已弃用的语法。

如何解决冲突

若要修复内部联接中的冲突,请使用 INNER JOIN 语法,如本主题后面的示例所示。 有关详细信息,请参阅 Microsoft 网站上的以下页面:Using Inner Joins(使用内部联接)。

若要修复外部联接中的冲突,请使用相应的 OUTER JOIN 语法,如本主题稍后显示的示例所示。 您具有以下选项:

  • LEFT OUTER JOIN 或 LEFT JOIN

  • RIGHT OUTER JOIN 或 RIGHT JOIN

    提示

    Transact-SQL 支持 FULL OUTER JOIN 和 FULL JOIN,但该联接类型没有前面的语法。

有关详细信息,请参阅 Microsoft 网站上的以下页面:Using Outer Joins(使用外部联接)。

何时禁止显示警告

不应禁止显示此警告。 应修复所有实例,因为弃用的语法可能在 SQL Server 将来的版本中不起作用。

示例

六个示例展示了以下选项:

  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]

请参见

概念

分析数据库代码以提高代码质量