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 说明内部联接已弃用的语法。
示例 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]