MSSQLSERVER_207

適用於:SQL Server

詳細資料

屬性
產品名稱 SQL Server
事件識別碼 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。 處理順序如下所示:

    1. FROM

    2. 開啟

    3. JOIN

    4. WHERE

    5. GROUP BY

    6. WITH CUBE 或 WITH ROLLUP

    7. HAVING

    8. SELECT

    9. DISTINCT

    10. 排序依據

    11. 頂端

    因為在處理 SELECT 子句之前,不會定義資料行別名,因此處理 GROUP BY 子句時,別名名稱未知。

  • 當merge_matched > 子句參考來源資料表中的資料行,但 WHEN NOT MATCHED BY SOURCE 子句中的來源資料表不會傳回任何資料列時 < ,MERGE 語句就會引發這個錯誤。 因為來源資料表中的資料行在未傳回查詢時無法存取,所以會發生此錯誤。 例如,如果 Col1 無法存取來源資料表,子句 WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = SourceTable.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區分大小寫和區分腔調字的定序。 修改資料行名稱,以符合資料表中所定義之資料行名稱的案例。

  • 資料行別名的參考不正確。 重複運算式來修改 語句,以定義適當子句中的別名,或使用衍生資料表。 下列範例會重複定義 Year GROUP BY 子句中別名的運算式。

    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 子句是指可存取的值。 修改 MERGE 語句,讓 WHEN NOT MATCHED BY SOURCE 子句中的來源資料表傳回至少一個資料列。 例如,您可能需要新增或修改為 子句指定的搜尋條件。 或者,您可以修改 子句來指定未參考來源資料表的值。 例如: 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)