SR0010: не используйте устаревший синтаксис при объединении таблиц или представлений
Идентификатор RuleId |
SR0010 |
Категория |
Microsoft.Design |
Критическое изменение |
Не критическое |
Причина
Одно или несколько соединений между таблицами и представлениями используют устаревший синтаксис (такой как =, *= и =* в предложении WHERE) вместо текущего синтаксиса.
Описание правила
Соединения, использующие устаревший синтаксис, делятся на две категории:
Внутреннее соединение
Для внутреннего соединения значения соединяемых столбцов сравниваются с помощью оператора сравнения, такого как "=", "<", ">=" и т.п. Внутренние соединения возвращают строки, только если хотя бы одна строка из каждой таблицы соответствует условиям соединения.Внешнее соединение
Внешние объединения возвращают все строки из по крайней мере одной таблицы или представления, указанных в предложении FROM, если они удовлетворяют условиям поиска WHERE или HAVING. При использовании *= и = * для указания внешнего соединения применяется устаревший синтаксис.
Устранение нарушений
Чтобы устранить нарушение во внутреннем соединении, используйте синтаксис INNER JOIN, как показано в примере ниже в этом же разделе. Дополнительные сведения см. на странице Использование внутренних соединений (страница может быть на английском языке) веб-сайта корпорации Майкрософт.
Чтобы устранить нарушение во внешнем соединении, используйте подходящий синтаксис OUTER JOIN, как показано в примерах ниже в этом же разделе. Имеются следующие варианты:
LEFT OUTER JOIN или LEFT JOIN
RIGHT OUTER JOIN или RIGHT JOIN
Примечание
Transact-SQL поддерживает FULL OUTER JOIN и FULL JOIN, но в этом типе соединения не было предыдущего синтаксиса.
Дополнительные сведения см. на странице Использование внешних соединений (страница может быть на английском языке) веб-сайта корпорации Майкрософт.
Отключение предупреждений
Не следует отключать данные предупреждения. Следует исправить все экземпляры, поскольку устаревший синтаксис может не работать в будущих выпусках 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]