共用方式為


MSSQLSERVER_207

適用於:SQL Server

詳細資料

屬性
產品名稱 SQL Server
事件識別碼 207
事件來源 MSSQLSERVER
元件 SQLEngine
符號名稱 SQ_BADCOL
訊息文字 無效的資料行名稱 '%.*ls'。

說明

此查詢錯誤可能是下列其中一個問題所造成。

  • 數據行名稱拼錯或數據行不存在於任何指定的數據表中。

  • 資料庫的定序會區分大小寫,而且查詢中指定的數據行名稱大小寫與數據表中定義的數據行大小寫不符。 例如,當數據表中將數據行定義為 LastName,而資料庫使用區分大小寫的定序時,將參考數據行為 Lastnamelastname 的查詢會導致錯誤 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)