MSSQLSERVER_207
적용 대상: SQL Server
세부 정보
attribute | 값 |
---|---|
제품 이름 | SQL Server |
이벤트 ID | 207 |
이벤트 원본 | MSSQLSERVER |
구성 요소 | SQLEngine |
심볼 이름 | SQ_BADCOL |
메시지 텍스트 | 열 이름 '%.*ls'이(가) 잘못되었습니다. |
설명
이 쿼리 오류는 다음 문제 중 하나로 인해 발생할 수 있습니다.
열 이름의 철자가 잘못되었거나 지정한 테이블 어디에도 해당 열이 없습니다.
데이터베이스에서 데이터를 정렬하는 데 대/소문자를 구분하고 있으며 쿼리에 지정한 열 이름의 대/소문자가 테이블에 정의된 열의 대/소문자와 일치하지 않습니다. 예를 들어 테이블에서 열을 LastName으로 정의하고 데이터베이스에서 대/소문자 구분 데이터 정렬을 사용하는 경우 쿼리에 지정한 열이 Lastname 또는 lastname이면 열 이름이 일치하지 않으므로 207 오류가 반환됩니다.
SELECT 절에 정의된 열 별칭은 WHERE 또는 GROUP BY 절과 같은 다른 절에서 참조됩니다. 예를 들어 다음 쿼리의 경우 SELECT 절에 열 별칭
Year
를 정의하고 GROUP BY 절에서 이 별칭을 참조합니다.USE AdventureWorks2022; GO SELECT DATEPART(yyyy,OrderDate) AS Year, SUM(TotalDue) AS Total FROM Sales.SalesOrderHeader GROUP BY Year;
쿼리 절이 논리적으로 처리되는 순서로 인해 예제에서는 오류 207을 반환합니다. 처리 순서는 다음과 같습니다.
FROM
켜기
JOIN
WHERE
GROUP BY
WITH CUBE 또는 WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
맨 위로 이동
SELECT 절이 처리될 때까지 열 별칭이 정의되지 않으므로 GROUP BY 절이 처리될 때 별칭 이름을 알 수 없습니다.
MERGE 문은 merge_matched> 절이 원본 테이블의 <열을 참조하지만 WHEN NOT MATCHED BY SOURCE 절의 원본 테이블에서 행을 반환하지 않으면 이 오류가 발생합니다. 쿼리에 아무 행도 반환되지 않으면 원본 테이블의 열에 액세스할 수 없으므로 오류가 발생합니다. 예를 들어 이 절
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 AdventureWorks2022; GO SELECT DATEPART(yyyy,OrderDate) AS Year ,SUM(TotalDue) AS Total FROM Sales.SalesOrderHeader GROUP BY DATEPART(yyyy,OrderDate);
다음 예제에서는 파생 테이블을 사용하여 쿼리의 다른 절에서 별칭 이름을 사용할 수 있도록 합니다. 별칭
Year
은 먼저 처리되는 FROM 절에 정의되므로 쿼리의 다른 절에서 별칭을 사용할 수 있습니다.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;
MERGE 문의 WHEN NOT MATCHED BY SOURCE 절이 참조하는 값에 액세스할 수 없습니다. WHEN NOT MATCHED BY SOURCE 절의 원본 테이블에서 하나 이상의 행이 반환되도록 MERGE 문을 수정합니다. 예를 들어 이 절에 지정된 검색 조건을 추가하거나 수정해야 할 수 있습니다. 또는 절을 수정하여 원본 테이블을 참조하지 않는 값을 지정할 수 있습니다.
WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = <expression, or other available value>
)을 입력합니다.
참고 항목
MERGE(Transact-SQL)
FROM(Transact-SQL)
SELECT (Transact-SQL)
UPDATE(Transact-SQL)