SQL 2000 до SQL 2008 - PullRequest
       11

SQL 2000 до SQL 2008

2 голосов
/ 26 апреля 2011

У меня есть запрос в БД SQL 2000, и мне нужно перенести его в БД SQL 2008. Он прекрасно работает в 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 

Ответы [ 4 ]

2 голосов
/ 26 апреля 2011

* = является левым соединением

= * является правым соединением

Вы пытались вызвать его в редакторе SQL в SQL Server Management Studio?Это может преобразовать это для вас.

1 голос
/ 26 апреля 2011
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
1 голос
/ 26 апреля 2011

К сожалению, не совсем понятно, что вы подразумеваете под «перегрузкой *=, =* предложением в предложении ON». Однако я вижу одну проблему: вы используете синтаксис старого стиля для внешних объединений. Вы должны заменить этот синтаксис на новый синтаксис "ANSI SQL" . Это использует ключевые слова, а не *= и =*, и перемещает условие соединения в предложение FROM:

  • WHERE a.x *= b.y становится FROM a LEFT OUTER JOIN b ON a.x = b.y
  • WHERE a.x =* b.y становится FROM a RIGHT OUTER JOIN b ON a.x = b.y
  • Существует также FROM a FULL OUTER JOIN b ON a.x = b.y, который дополняет несогласованные кортежи из таблицы либо с NULL.

Старый синтаксис устарел с SQL Server 2005 , потому что он был нестандартным и допускал двусмысленность. недоступно в базах данных, работающих в SQL Server 2005 или более поздней версии в режиме совместимости, что, вероятно, является источником вашей проблемы.

0 голосов
/ 26 апреля 2011

Я считаю, что запрос должен выглядеть примерно так, как показано ниже, хотя я не знаю, хотите ли вы сделать INNER JOIN и RIGHT JOIN с таблицей tblreceipt.

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 
...