MSSQLSERVER_207MSSQLSERVER_207

Aplica-se a:Applies to: simSQL ServerSQL Server (todas as versões compatíveis) yesSQL ServerSQL Server (all supported versions) Aplica-se a:Applies to: simSQL ServerSQL Server (todas as versões compatíveis) yesSQL ServerSQL Server (all supported versions)

DetalhesDetails

AtributoAttribute ValorValue
Nome do ProdutoProduct Name SQL ServerSQL Server
ID do eventoEvent ID 207207
Origem do EventoEvent Source MSSQLSERVERMSSQLSERVER
ComponenteComponent SQLEngineSQLEngine
Nome simbólicoSymbolic Name SQ_BADCOLSQ_BADCOL
Texto da mensagemMessage Text Nome de coluna inválido '%.*ls'.Invalid column name '%.*ls'.

ExplicaçãoExplanation

Esse erro de consulta pode ser provocado por um dos problemas a seguir.This query error can be caused by one of the following problems.

  • O nome da coluna foi digitado incorretamente ou a coluna não existe em nenhuma das tabelas especificadas.The column name is misspelled or the column does not exist in any of the specified tables.

  • A ordenação do banco de dados diferencia maiúsculas e minúsculas e as maiúsculas e minúsculas do nome da coluna especificado na consulta não correspondem às maiúsculas e minúsculas definidas na tabela.The collation of the database is case-sensitive and the case of the column name specified in the query does not match the case of the column defined in the table. Por exemplo, quando uma coluna estiver definida em uma tabela como LastName e o banco de dados usar uma ordenação com diferenciação de maiúsculas e minúsculas, as consultas que fizerem referência à coluna como Lastname ou lastname retornarão o erro 207, pois o nome da coluna não é correspondente.For example, when a column is defined in a table as LastName and the database uses a case-sensitive collation, queries that refer to the column as Lastname or lastname will cause error 207 to return because the column name does not match.

  • Um alias de coluna definido na cláusula SELECT é referenciado em outra cláusula, como em uma cláusula WHERE ou GROUP BY.A column alias, defined in the SELECT clause, is referenced in another clause such as a WHERE or GROUP BY clause. Por exemplo, a consulta a seguir define o alias de coluna Year na cláusula SELECT e faz referência a ele na cláusula GROUP BY.For example, the following query defines the column alias Year in the SELECT clause and refers to it in the GROUP BY clause.

    USE AdventureWorks2012;  
    GO  
    SELECT DATEPART(yyyy,OrderDate) AS Year, SUM(TotalDue) AS Total  
    FROM Sales.SalesOrderHeader  
    GROUP BY Year;  
    

    Devido à ordem em que as cláusulas da consulta são processadas logicamente, o exemplo retorna o erro 207.Due to the order in which query clauses are logically processed, the example returns error 207. A ordem do processamento é a seguinte:The processing order is as follows:

    1. FROMFROM

    2. ATIVADOON

    3. JOINJOIN

    4. WHEREWHERE

    5. GROUP BYGROUP BY

    6. WITH CUBE ou WITH ROLLUPWITH CUBE or WITH ROLLUP

    7. HAVINGHAVING

    8. SELECTSELECT

    9. DISTINTODISTINCT

    10. ORDER BYORDER BY

    11. INÍCIOTOP

    Como um alias de coluna não é definido até que a cláusula SELECT seja processada, o nome do alias é desconhecido quando a cláusula GROUP BY é processada.Because a column alias is not defined until the SELECT clause is processed, the alias name is unknown when the GROUP BY clause is processed.

  • A instrução MERGE aciona esse erro quando a cláusula <merge_matched> referencia colunas na tabela de origem, mas nenhuma linha é retornada pela tabela de origem na cláusula WHEN NOT MATCHED BY SOURCE.The MERGE statement raises this error when the <merge_matched> clause references columns in the source table but no rows are returned by the source table in the WHEN NOT MATCHED BY SOURCE clause. O erro ocorre porque as colunas na tabela de origem não podem ser acessadas quando nenhuma linha é retornada para a consulta.The error occurs because the columns in the source table cannot be accessed when no rows are returned to the query. Por exemplo, a cláusula WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = SourceTable.Col1 poderá fazer com que a instrução falhe se Col1 estiver inacessível na tabela de origem.For example, the clause WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = SourceTable.Col1 may cause the statement to fail if Col1 in the source table is inaccessible.

Ação do usuárioUser Action

Verifique as informações a seguir e corrija a instrução conforme apropriado.Verify the following information and correct the statement as appropriate.

  • O nome da coluna existe na tabela e está digitado corretamente.The column name exists in the table and is spelled correctly. O exemplo a seguir consulta a exibição do catálogo sys.columns para retornar todos os nomes de colunas de determinada tabela.The following example queries the sys.columns catalog view to return all column names for a given table.

    SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('schema_name.table_name');  
    
  • A diferenciação de maiúsculas e minúsculas da ordenação de banco de dados.The case sensitivity of the database collation. A instrução a seguir retorna a ordenação do banco de dados especificado.The following statement returns the collation of the specified database.

    SELECT collation_name FROM sys.databases WHERE name = 'database_name';  
    

    A abreviação CS no nome da ordenação indica que ela diferencia maiúsculas de minúsculas.The abbreviation CS in the collation name indicates the collation is case-sensitive. Por exemplo, Latin1_General_CS_AS é uma ordenação que tem diferenciação de maiúsculas e minúsculas e de acentos.For example, Latin1_General_CS_AS is a case-sensitive and accent-sensitive collation. Modifique o nome da coluna para que coincida com as maiúsculas e minúsculas do nome da coluna conforme definido na tabela.Modify the column name to match the case of the column name as it is defined in the table.

  • O alias de uma coluna está referenciado incorretamente.A column alias is referenced incorrectly. Modifique a instrução repetindo a expressão que define o alias na cláusula adequada ou usando uma tabela derivada.Modify the statement by repeating the expression that defines the alias in the appropriate clause or by using a derived table. O exemplo a seguir repete as expressões que definem o alias Year na cláusula GROUP BY.The following example repeats the expressions that define the Year alias in the GROUP BY clause.

    USE AdventureWorks2012;  
    GO  
    SELECT DATEPART(yyyy,OrderDate) AS Year ,SUM(TotalDue) AS Total  
    FROM Sales.SalesOrderHeader  
    GROUP BY DATEPART(yyyy,OrderDate);  
    

    O exemplo a seguir usa uma tabela derivada para disponibilizar o nome do alias para outras cláusulas na consulta.The following example uses a derived table to make the alias name available to other clauses in the query. Observe que o alias Year está definido na cláusula FROM que é processada primeiro e, portanto, disponibiliza o alias para uso em outras cláusulas na consulta.Notice that the alias Year is defined in the FROM clause, which is processed first, and so makes the alias available for use in other clauses in the query.

    USE AdventureWorks2012;  
    GO  
    SELECT d.Year, SUM(TotalDue) AS Total  
    FROM (SELECT DATEPART(yyyy,OrderDate) AS Year, TotalDue  
          FROM Sales.SalesOrderHeader)AS d  
    GROUP BY Year;  
    
  • A cláusula WHEN NOT MATCHED BY SOURCE na instrução MERGE faz referência a um valor que pode ser acessado.The WHEN NOT MATCHED BY SOURCE clause in the MERGE statement refers to a value that can be accessed. Modifique a instrução MERGE de forma que pelo menos uma linha seja retornada pela tabela de origem na cláusula WHEN NOT MATCHED BY SOURCE.Modify the MERGE statement so that at least one row is returned by the source table in the WHEN NOT MATCHED BY SOURCE clause. Por exemplo, talvez você precise adicionar ou revisar a condição da pesquisa especificada para a cláusula.For example, you might need to add or revise the search condition specified for the clause. Como alternativa, é possível modificar a cláusula para especificar um valor que não faz referência à tabela de origem.Alternatively, you can modify the clause to specify a value that does not reference the source table. Por exemplo, WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = <expression, or other available value>.For example, WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = <expression, or other available value>.

Consulte TambémSee Also

MERGE (Transact-SQL)MERGE (Transact-SQL)
FROM (Transact-SQL)FROM (Transact-SQL)
SELECT (Transact-SQL)SELECT (Transact-SQL)
UPDATE (Transact-SQL)UPDATE (Transact-SQL)