【发布时间】:2015-07-21 09:03:25
【问题描述】:
我正在针对新的(-er)Sql Server 2008 环境重写一堆旧的、写得不好的 Oracle 查询。他们使用老式的 Oracle 连接语法,如
select <whatever>
from Table1, Table2, Table3
where Table1.T1ID = Table2.T2ID -- old Oracle inner join
and Table2.T3ID = Table3.T3ID (+) -- old Oracle left join (I think)
除了复杂得多。有很多混合连接和大量嵌套,以及大量视图堆积在这些事物中的视图上。这不漂亮。两台服务器之间的数据也是不同的,这让测试变得很麻烦。
我认为最简单的复制方法是使查询在 Sql Server 中看起来尽可能相似(即,使用相同的连接样式),然后在我确信之后进行大规模的清理工作他们肯定都在做同样的事情,而且我没有在错误的地方加入(是的,我暂时设置了兼容模式以支持旧加入)。
我知道 T-Sql 中内部连接的“旧”语法是
select <whatever>
from T1, T2
where T1.ID = T2.ID
但是左外连接或右外连接的“旧”语法是什么?
【问题讨论】:
-
值得注意的是,非 ANSI 外连接运算符(
*=和=*)自 SQL Server 2005 以来已被弃用,如果您想在 SQL Server 2008 中使用这些,您将需要将数据库的兼容级别设置为 80。这可能会导致许多其他进程失败,您可能需要硬着头皮立即使用 ANSI92 连接语法重写。 -
我知道 - 在问题中:
(and yes, I have compatibility mode temporarily set to support old joins).:)
标签: sql-server sql-server-2008 join legacy-code