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。 處理順序如下所示:
FROM
開啟
JOIN
WHERE
GROUP BY
WITH CUBE 或 WITH ROLLUP
HAVING
SELECT
DISTINCT
排序依據
頂端
因為在處理 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)
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應