我正在將后端預算資料庫從 Access 遷移到 SQL Server,但遇到了問題。
我有 2 個表(讓我們稱它們為 t1 和 t2)共享許多共同的欄位:Fund、Department、Object、Subcode、TrackingCode、Reserve 和 FYEnd。
如果我想連接表以查找所有 7 個欄位都匹配的記錄,我可以使用每個欄位創建一個內部連接:
SELECT *
FROM t1
INNER JOIN t2
ON t1.Fund = t2.Fund
AND t1.Department = t2.Department
AND t1.Object = t2.Object
AND t1.Subcode = t2.Subcode
AND t1.TrackingCode = t2.TrackingCode
AND t1.Reserve = t2.Reserve
AND t1.FYEnd = t2.FYEnd;
這有效,但運行速度非常慢。當后端在 Access 中時,我能夠通過向兩個表添加計算列來解決問題。它基本上只是使用“-”作為分隔符連接欄位。修改后的查詢如下:
SELECT *
FROM t1 INNER JOIN t2
ON CalculatedColumn = CalculatedColumn
這看起來更干凈并且運行得更快。問題是當我將 t1 和 t2 移動到 SQL Server 時,相同的查詢給了我一條錯誤訊息:

我是 SQL Server 的新手。誰能解釋這里發生了什么?計算列是否需要更改設定?
uj5u.com熱心網友回復:
從我的評論中發布這個答案。
通常,這是參考的兩列之間資料型別不匹配的問題。檢查并確保兩個欄位(CompositeID)的資料型別相同。
uj5u.com熱心網友回復:
您必須在加入它們之前計算列,因為該ON子句只能訪問表的列。
無論如何,有兩個相同的表是不好的,因此您應該徹底重新考慮您的設計。
SELECT t1a.*,t2a.*
FROM (SELECT CalculatedColumn, * FROM t1) t1a INNER JOIN (SELECT CalculatedColumn, * FROM t2 ) t2a
ON t1a.CalculatedColumn = t2a.CalculatedColumn
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/537629.html
