Kai*_*Kai 5 sql-server join legacy-code sql-server-2008
我正在针对新的(呃)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)
Run Code Online (Sandbox Code Playgroud)
除了复杂得多。在这些事情中存在大量的混合连接、大量的嵌套以及大量的视图堆积在视图上。这并不漂亮。两台服务器之间的数据也不同,这使得测试变得很麻烦。
我认为最简单的复制方法是使查询在 Sql Server 中看起来尽可能相似(即使用相同样式的联接),然后在我确信它们是之后执行大量清理工作两者肯定都在做同样的事情,而且我没有在错误的地方加入(是的,我暂时设置了兼容模式来支持旧的加入)。
我知道 T-Sql 中内部联接的“旧”语法是
select <whatever>
from T1, T2
where T1.ID = T2.ID
Run Code Online (Sandbox Code Playgroud)
但是左外连接或右外连接的“旧”语法是什么?
根据TechNet上的文档(在 SQL Server 2000 上,因此请注意,这可能不再受支持!),您需要使用*=而不是像(+)Oracle 那样:
select <whatever>
from T1, T2
where T1.ID *= T2.ID
Run Code Online (Sandbox Code Playgroud)