MSSQLSERVER_207MSSQLSERVER_207

세부 정보Details

제품 이름Product Name SQL ServerSQL Server
이벤트 IDEvent ID 207207
이벤트 원본Event Source MSSQLSERVERMSSQLSERVER
구성 요소Component SQLEngineSQLEngine
심볼 이름Symbolic Name SQ_BADCOLSQ_BADCOL
메시지 텍스트Message Text 열 이름 '%.ls'이(가) 잘못되었습니다.Invalid column name '%.ls'.

설명Explanation

이 쿼리 오류는 다음과 같은 문제로 인해 발생할 수 있습니다.This query error can be caused by one of the following problems.

  • 열 이름의 철자가 잘못되었거나 지정한 테이블 어디에도 해당 열이 없습니다.The column name is misspelled or the column does not exist in any of the specified tables.

  • 데이터베이스에서 데이터를 정렬하는 데 대/소문자를 구분하고 있으며 쿼리에 지정한 열 이름의 대/소문자가 테이블에 정의된 열의 대/소문자와 일치하지 않습니다.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. 예를 들어 테이블에서 열을 LastName으로 정의하고 데이터베이스에서 대/소문자 구분 데이터 정렬을 사용하는 경우 쿼리에 지정한 열이 Lastname 또는 lastname이면 열 이름이 일치하지 않으므로 207 오류가 반환됩니다.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.

  • SELECT 절에 정의한 열 별칭을 WHERE 또는 GROUP BY 등의 다른 절에서 참조합니다.A column alias, defined in the SELECT clause, is referenced in another clause such as a WHERE or GROUP BY clause. 예를 들어 다음 쿼리의 경우 SELECT 절에 열 별칭 Year를 정의하고 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;  
    

    쿼리 절의 논리적인 처리 순서 때문에 이 예제에서는 207 오류가 반환됩니다.Due to the order in which query clauses are logically processed, the example returns error 207. 처리 순서는 다음과 같습니다.The processing order is as follows:

    1. FROMFROM

    2. ONON

    3. JOINJOIN

    4. WHEREWHERE

    5. GROUP BYGROUP BY

    6. WITH CUBE 또는 WITH ROLLUPWITH CUBE or WITH ROLLUP

    7. HAVINGHAVING

    8. SELECTSELECT

    9. DISTINCTDISTINCT

    10. ORDER BYORDER BY

    11. 맨 위로 이동TOP

    SELECT 절을 처리할 때까지는 열 별칭이 정의되지 않은 상태이므로 GROUP BY 절을 처리하는 단계에서는 별칭 이름을 알 수 없습니다.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.

  • <merge_matched> 절에서 원본 테이블의 열을 참조하고 있지만 WHEN NOT MATCHED BY SOURCE 절의 원본 테이블에서 아무 행도 반환하지 않는 경우 MERGE 문을 통해 이 오류가 발생합니다.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. 쿼리에 아무 행도 반환되지 않으면 원본 테이블의 열에 액세스할 수 없으므로 오류가 발생합니다.The error occurs because the columns in the source table cannot be accessed when no rows are returned to the query. 예를 들어 원본 테이블의 WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = SourceTable.Col1에 액세스할 수 없는 경우 Col1 절을 지정하면 이 문이 실패할 수 있습니다.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.

사용자 동작User Action

다음 정보를 확인하고 적절하게 문을 수정하십시오.Verify the following information and correct the statement as appropriate.

  • 열 이름이 테이블에 있는지 확인하고 이름의 철자가 올바른지 확인하십시오.The column name exists in the table and is spelled correctly. 다음 예제에서는 sys.columns 카탈로그 뷰를 쿼리하여 지정된 테이블의 열 이름을 모두 반환합니다.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');  
    
  • 데이터베이스 데이터 정렬의 대/소문자 구분.The case sensitivity of the database collation. 다음 문은 지정된 데이터베이스의 데이터 정렬을 반환합니다.The following statement returns the collation of the specified database.

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

    데이터 정렬 이름의 약어 CS는 해당 데이터 정렬에서 대/소문자를 구분한다는 의미입니다.The abbreviation CS in the collation name indicates the collation is case-sensitive. 예를 들어 Latin1_General_CS_AS는 대/소문자와 악센트를 구분하는 데이터 정렬입니다.For example, Latin1_General_CS_AS is a case-sensitive and accent-sensitive collation. 열 이름의 대/소문자가 테이블에 정의된 것과 일치하도록 열 이름을 수정합니다.Modify the column name to match the case of the column name as it is defined in the table.

  • 열 별칭을 올바르게 참조했는지 확인하십시오.A column alias is referenced incorrectly. 올바른 절에 별칭을 정의하는 식을 반복하거나 파생 테이블을 사용하여 문을 수정합니다.Modify the statement by repeating the expression that defines the alias in the appropriate clause or by using a derived table. 다음 예에서는 GROUP BY 절에 Year 별칭을 정의하는 식을 반복합니다.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);  
    

    다음 예에서는 파생 테이블을 사용하여 별칭 이름을 쿼리의 다른 절에 사용할 수 있도록 만듭니다.The following example uses a derived table to make the alias name available to other clauses in the query. 별칭 Year가 FROM 절에 정의되어 있고 이 절이 제일 먼저 처리되므로 쿼리의 다른 절에서도 이 별칭을 사용할 수 있습니다.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;  
    
  • MERGE 문의 WHEN NOT MATCHED BY SOURCE 절이 참조하는 값에 액세스할 수 없습니다.The WHEN NOT MATCHED BY SOURCE clause in the MERGE statement refers to a value that can be accessed. WHEN NOT MATCHED BY SOURCE 절의 원본 테이블에서 하나 이상의 행을 반환하도록 MERGE 문을 수정합니다.Modify the MERGE statement so that at least one row is returned by the source table in the WHEN NOT MATCHED BY SOURCE clause. 예를 들어 이 절에 지정된 검색 조건을 추가하거나 수정해야 할 수 있습니다.For example, you might need to add or revise the search condition specified for the clause. 또는 절을 수정하여 원본 테이블을 참조하지 않는 값을 지정할 수 있습니다.Alternatively, you can modify the clause to specify a value that does not reference the source table. 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>.

관련 항목:See 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)