MSSQLSERVER_207
Aplica-se: SQL Server
Detalhes
Atributo | Valor |
---|---|
Nome do produto | SQL Server |
ID do evento | 207 |
Origem do Evento | MSSQLSERVER |
Componente | SQLEngine |
Nome simbólico | SQ_BADCOL |
Texto da mensagem | Nome de coluna inválido '%.*ls'. |
Explicação
Esse erro de consulta pode ser provocado por um dos problemas a seguir.
O nome da coluna foi digitado incorretamente ou a coluna não existe em nenhuma das tabelas especificadas.
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. 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.
Um alias de coluna definido na cláusula SELECT é referenciado em outra cláusula, como em uma cláusula WHERE ou GROUP BY. 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.USE AdventureWorks2022; 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. A ordem do processamento é a seguinte:
FROM
ATIVADO
JOIN
WHERE
GROUP BY
WITH CUBE ou WITH ROLLUP
HAVING
SELECT
DISTINTO
ORDER BY
INÍCIO
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.
A instrução MERGE gera esse erro quando a <cláusula merge_matched> faz referência a colunas na tabela de origem, mas nenhuma linha é retornada pela tabela de origem na cláusula WHEN NOT MATCHED BY SOURCE. O erro ocorre porque as colunas na tabela de origem não podem ser acessadas quando nenhuma linha é retornada para a consulta. 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 seCol1
estiver inacessível na tabela de origem.
Ação do usuário
Verifique as informações a seguir e corrija a instrução conforme apropriado.
O nome da coluna existe na tabela e está digitado corretamente. O exemplo a seguir consulta a exibição do catálogo sys.columns para retornar todos os nomes de colunas de determinada tabela.
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. A instrução a seguir retorna a ordenação do banco de dados especificado.
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. Por exemplo, Latin1_General_CS_AS é uma ordenação que tem diferenciação de maiúsculas e minúsculas e de acentos. Modifique o nome da coluna para que coincida com as maiúsculas e minúsculas do nome da coluna conforme definido na tabela.
O alias de uma coluna está referenciado incorretamente. Modifique a instrução repetindo a expressão que define o alias na cláusula adequada ou usando uma tabela derivada. O exemplo a seguir repete as expressões que definem o alias
Year
na cláusula GROUP BY.USE AdventureWorks2022; 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. 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.USE AdventureWorks2022; 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. 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. Por exemplo, talvez você precise adicionar ou revisar a condição da pesquisa especificada para a cláusula. Como alternativa, é possível modificar a cláusula para especificar um valor que não faz referência à tabela de origem. Por exemplo,
WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = <expression, or other available value>
.
Confira também
MERGE (Transact-SQL)
FROM (Transact-SQL)
SELECT (Transact-SQL)
UPDATE (Transact-SQL)