MSSQLSERVER_207
Сведения
Название продукта |
SQL Server |
Версия продукта |
10.0 |
Номер сборки продукта |
|
Идентификатор события |
207 |
Источник события |
MSSQLSERVER |
Компонент |
SQLEngine |
Символическое имя |
SQ_BADCOL |
Текст сообщения |
Недопустимое имя столбца "%.*ls". |
Объяснение
Возможны следующие причины возникновения этой ошибки запроса.
Имя столбца указано неправильно, либо столбец не существует ни в одной указанной таблице.
Параметры сортировки базы данных учитывают регистр, а регистр имени столбца, указанный в запросе, не совпадает с регистром столбца, определенным в таблице. Например, если столбец определен в таблице как LastName и в базе данных используются параметры сортировки с учетом регистра, то при выполнении запроса, в которых для этого столбца указано имя Lastname или lastname, возникнет ошибка 207, поскольку имена столбцов не совпадают.
Псевдоним столбца, определенный в предложении SELECT, упоминается в другом предложении, например WHERE или GROUP BY. Например, следующий запрос определяет псевдоним столбца Year в предложении SELECT и упоминает его в предложении GROUP BY.
USE AdventureWorks; GO SELECT DATEPART(yyyy,OrderDate) AS Year, SUM(TotalDue) AS Total FROM Sales.SalesOrderHeader GROUP BY Year;Порядок логической обработки предложений запросов в этом примере приводит к возникновению ошибки 207. Существует следующий порядок обработки.
FROM
ON
JOIN
WHERE
GROUP BY
WITH CUBE или WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
Поскольку псевдоним столбца не определяется до обработки предложения SELECT, псевдоним неизвестен при обработке предложения GROUP BY.
Инструкция MERGE выдает эту ошибку, когда исходная таблица в предложении WHEN NOT MATCHED BY SOURCE не возвращает строк, а предложение <merge_matched> ссылается на столбцы в исходной таблице. Данная ошибка возникает из-за того, что невозможно обратиться к столбцам в исходной таблице, если запрос не возвратил строк. Например, предложение WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = SourceTable.Col1 может стать причиной ошибки инструкции из-за недоступности столбца Col1 в исходной таблице.
Действие пользователя
Проверьте следующую информацию и исправьте инструкцию соответствующим образом.
Наличие имени столбца в таблице и правильность его указания. В следующем примере запрос к представлению каталога sys.columns возвращает все имена столбцов для данной таблицы.
SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('schema_name.table_name');Учет регистра в параметрах сортировки базы данных. Следующая инструкция возвращает параметры сортировки для указанной базы данных.
SELECT collation_name FROM sys.databases WHERE name = 'database_name';Аббревиатура CS в имени параметров сортировки означает, что учитывается регистр символов. Например, Latin1_General_CS_AS определяет параметры сортировки с учетом диакритических знаков и с учетом регистра. Измените имя столбца, чтобы оно совпадало с тем именем столбца, которое было определено в таблице, вплоть до регистра.
Неправильное упоминание псевдонима столбца. Измените инструкцию, повторив выражение, определяющее псевдоним, в соответствующем предложении или использовав производную таблицу. В следующем примере в предложении GROUP BY повторяются выражения, определяющие псевдоним Year.
USE AdventureWorks; GO SELECT DATEPART(yyyy,OrderDate) AS Year ,SUM(TotalDue) AS Total FROM Sales.SalesOrderHeader GROUP BY DATEPART(yyyy,OrderDate);В следующем примере производная таблица используется для того, чтобы сделать псевдоним доступным для других предложений в запросе. Следует заметить, что псевдоним Year определяется в предложении FROM, которое обрабатывается в первую очередь, что делает псевдоним доступным для использования в других предложениях запроса.
USE AdventureWorks; GO SELECT d.Year, SUM(TotalDue) AS Total FROM (SELECT DATEPART(yyyy,OrderDate) AS Year, TotalDue FROM Sales.SalesOrderHeader)AS d GROUP BY Year;В предложении WHEN NOT MATCHED BY SOURCE инструкции MERGE упоминается значение, к которому может осуществляться доступ. Измените инструкцию MERGE, чтобы по крайней мере одна строка была возвращена исходной таблицей в предложении WHEN NOT MATCHED BY SOURCE. Например, может потребоваться добавить или изменить условие поиска, указанное для предложения. В качестве альтернативы можно изменить предложение, чтобы указать значение, не ссылающееся на исходную таблицу. Например, WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = <expression, or other available value>.
См. также