SR0010: Evite usar sintaxe preterido quando você associa tabelas ou modos de exibição
RuleId |
SR0010 |
<strong>Categoria</strong> |
Microsoft.design |
Alteração significativa |
Não-separável |
Causa
Associações de um ou mais entre as tabelas e modos de exibição estão usando a sintaxe preterido (como =, * = ou = * em uma cláusula WHERE) em vez da sintaxe atual.
Descrição da regra
Associações que usam a sintaxe preterida classificados em duas categorias:
Associação interna
Para uma associação interna, os valores nas colunas que estão sendo unidas são comparados usando um operador de comparação como = <,> = e assim por diante. Associações internas retornam linhas somente se pelo menos uma linha de cada tabela corresponde a condição de associação.Associação externa
Outer joins retornam todas as linhas de pelo menos uma das tabelas ou modos de exibição especificados na cláusula FROM, desde que as linhas a cumprir qualquer onde ou HAVING critério de pesquisa. Se você usar * = ou = * para especificar uma associação externa, você está usando a sintaxe preterido.
Como corrigir violações
Para corrigir uma violação em uma associação interna, use a sintaxe de associação interna, como o exemplo posteriormente que neste tópico mostra. Para obter mais informações, consulte esta página no site da Microsoft: Usar interna ingressa.
Para corrigir uma violação de uma associação externa, use a sintaxe de associação externa apropriada, conforme os exemplos mais adiante neste tópico mostram. Você tem as seguintes opções:
LEFT OUTER JOIN ou LEFT JOIN
RIGHT OUTER JOIN ou RIGHT JOIN
Observação Transact-SQLoferece suporte completo de associação externa e união completa, mas esse tipo de associação não teve nenhuma sintaxe anterior.
Para obter mais informações, consulte esta página no site da Microsoft: Usar associações externas.
Quando suprimir avisos
Você não deve suprimir esse aviso. Você deve corrigir todas as instâncias, porque a sintaxe preterida pode não funcionar em versões futuras do SQL Server.
Exemplo
Os exemplos de seis demonstram as seguintes opções:
Exemplo 1 demonstra a sintaxe obsoleta para uma associação interna.
Exemplo 2 demonstra como você pode atualizar o exemplo 1 usar sintaxe atual.
Exemplo 3 demonstra a sintaxe obsoleta para uma junção externa esquerda.
Exemplo 4 demonstra como você pode atualizar o exemplo 2 usar sintaxe atual.
Exemplo 5 demonstra a sintaxe obsoleta para uma associação externa direita.
6 De exemplo demonstra como você pode atualizar 5 exemplo usar sintaxe atual.
-- 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]
Consulte também
Conceitos
Analisando o código do banco de dados para melhorar a qualidade do código