T-Sql 中连接的 'old style' 语法是什么?
What is the 'old style' syntax for joins in T-Sql?
我正在针对新的(-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 服务器中看起来尽可能相似(即,使用相同的连接方式),然后进行大量清理工作有一次我确信他们肯定在做同样的事情而且我没有在某个地方错误的地方加入(是的,我暂时设置了兼容模式以支持旧加入)。
我知道 T-Sql 中内部联接的 'old' 语法是
select <whatever>
from T1, T2
where T1.ID = T2.ID
但是左外连接或右外连接的 'old' 语法是什么?
根据 TechNet 上的文档(在 SQL Server 2000 上,请注意这可能不再受支持!),您需要使用 *=
而不是 (+)
与 Oracle 一样:
select <whatever>
from T1, T2
where T1.ID *= T2.ID
我正在针对新的(-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 服务器中看起来尽可能相似(即,使用相同的连接方式),然后进行大量清理工作有一次我确信他们肯定在做同样的事情而且我没有在某个地方错误的地方加入(是的,我暂时设置了兼容模式以支持旧加入)。
我知道 T-Sql 中内部联接的 'old' 语法是
select <whatever>
from T1, T2
where T1.ID = T2.ID
但是左外连接或右外连接的 'old' 语法是什么?
根据 TechNet 上的文档(在 SQL Server 2000 上,请注意这可能不再受支持!),您需要使用 *=
而不是 (+)
与 Oracle 一样:
select <whatever>
from T1, T2
where T1.ID *= T2.ID