繁体   English   中英

从SQL 2000到SQL 2008

[英]SQL 2000 to SQL 2008

我在SQL 2000 DB中有一个查询,我需要将其迁移到SQL 2008 DB。 它在SQL2000中可以正常工作,我不需要将其改编为SQL2008。 下面是SQL2000中的查询。 请指导我如何在ON子句中重载*==*子句。

SELECT tblacc. *
FROM   tblacc,
       tblst,
       tblreceipt,
       tblrtemp,
       tblitem
WHERE  tblacc.rkey = tblreceipt.rkey
       AND tblacc.stkey = tblst.stkey
       AND tblacc.stkey *= tblrtemp.stkey
       AND tblacc.stkey *= tblitem.stkey
       AND tblacc.itkey *= tblitem.itkey
       AND tblrtemp.rkey =* tblreceipt.rkey 

* =是左联接

= *是正确的加入

您是否尝试过在SQL Server Management Studio的SQL编辑器中启动它? 它可能会为您转换。

不幸的是,您不清楚“在ON子句中重载*==*子句”是什么意思。 但是,我看到一个问题:您正在对外部联接使用旧式语法。 您应该用新的“ ANSI SQL”语法替换此语法 这使用关键字而不是*==* ,并将连接条件移到FROM子句中:

  • WHERE ax *= by FROM a LEFT OUTER JOIN b ON ax = by变为FROM a LEFT OUTER JOIN b ON ax = by
  • WHERE ax =* by FROM a RIGHT OUTER JOIN b ON ax = by变为FROM a RIGHT OUTER JOIN b ON ax = by
  • FROM a FULL OUTER JOIN b ON ax = by还有FROM a FULL OUTER JOIN b ON ax = by ,它用NULL填充任一表中不匹配的元组。

自SQL Server 2005起不赞成使用旧语法,因为它是非标准语法,容易引入歧义。 在以SQL Server 2005或更高版本的兼容模式运行的数据库上不可用 ,这很可能是问题的根源。

SELECT tblacc.*
FROM   tblacc
  INNER JOIN tblreceipt ON tblacc.rkey = tblreceipt.rkey
  INNER JOIN tblst      ON tblacc.stkey = tblst.stkey
  LEFT JOIN  tblitem    ON tblacc.stkey = tblitem.stkey
                       AND tblacc.itkey = tblitem.itkey
  LEFT JOIN  tblrtemp   ON tblacc.stkey = tblrtemp.stkey
                       AND tblrtemp.rkey = tblreceipt.rkey

我相信查询应该像下面这样,尽管我不知道您是否想对tblreceipt表进行INNER JOINRIGHT JOIN

SELECT tblacc.*
FROM   tblacc
JOIN   tblreceipt
    ON tblacc.rkey = tblreceipt.rkey
JOIN   tblst
    ON tblacc.stkey = tblst.stkey
LEFT JOIN tblrtemp
    ON tblacc.stkey = tblrtemp.stkey
LEFT JOIN tblitem
    ON tblacc.stkey = tblitem.stkey AND tblacc.itkey = tblitem.itkey
RIGHT JOIN tblreceipt
    ON tblrtemp.rkey = tblreceipt.rkey 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM