【发布时间】:2011-07-15 23:42:10
【问题描述】:
我们有大约 150 个使用 *= 和 =* 类型 ANSI92 的旧式查询和视图?加入。 有没有人知道可以帮助转换的工具/方法或脚本,或者我们是否必须通过所有 150 个。
谢谢
Select PapersSent,
DateSent,
Code,
ActionDate,
ClientAction,
ClientContactRef,
PublishAppraisal,
PublishCV,
SponsorContactREF,
MeetingNotes,
InternalNotes,
Contact_AdminAction,
MeetingLocation
from tblMeetingNotes a,
tblPapersOptions b,
tblContactLog c
where a.CREF=@CREF and
a.CLID=@CLID AND
Isnull(PapersSent,0)*=Value AND
a.CREF*=c.CREF AND
a.CLID*=c.Contact_ID
【问题讨论】:
-
"ANSI92?join" *= 和 =* 不是 ANSI 92。ANSI SQL 92 引入了冗长的连接语法,例如
inner join和left outer join。 -
有什么特殊原因需要转换它们吗?为什么不让它们保持原样?
-
@Ben - 该语法已弃用,根据此答案doesn't always return the correct results。
-
@Ben - SQL Server 2000 中联机丛书的直接引用“在早期版本的 Microsoft® SQL Server™ 2000 中,左外连接条件和右外连接条件是使用 = 在 WHERE 子句中指定的和 = 运算符。在某些情况下,这种语法会导致不明确的查询,可以用多种方式解释。这意味着这些连接永远不应该被使用,甚至早在十一年前也不应该被使用,因为它不能保证按规定执行。如果您有任何此代码,则需要修复它。
-
“在某些情况下”。如果你没有这些情况,你就没有问题。 Deprecated 的意思是“不再制造”,而不是“扔掉旧的”。从那时起,操作员的解释就没有改变。我不建议任何人仅仅因为它已被弃用而更改经过调试、经过实战测试的代码。
标签: sql tsql sql-server-2000