簡體   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