我将后端预算数据库从Access迁移到SQL Server时遇到了问题。
我有两个表(我们称之为t1和t2),它们共享许多共同的字段:资金、部门、对象、子代码、跟踪代码、保留和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的新手。有人能解释一下这是怎么回事吗?是否需要更改计算列的设置?
2条答案
按热度按时间rks48beu1#
从我的评论张贴这一个答案。
通常,这是由于引用得两列之间得数据类型不匹配造成得问题.请检查并确保两个字段(CompositeID)得数据类型相同.
z9smfwbn2#
由于
ON
子句只能访问表的列,因此必须在连接列之前计算列。无论如何,有两个相同的表是没有好处的,所以你应该完全重新考虑你的设计。