[英]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 JOIN
和RIGHT 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.