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çãoObservaçã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:

  1. Exemplo 1 demonstra a sintaxe obsoleta para uma associação interna.

  2. Exemplo 2 demonstra como você pode atualizar o exemplo 1 usar sintaxe atual.

  3. Exemplo 3 demonstra a sintaxe obsoleta para uma junção externa esquerda.

  4. Exemplo 4 demonstra como você pode atualizar o exemplo 2 usar sintaxe atual.

  5. Exemplo 5 demonstra a sintaxe obsoleta para uma associação externa direita.

  6. 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