Oracle Non Ansi至Ansi T-SQL

时间:2019-01-31 13:40:31

标签: sql

我是一名SQL Server专家,使用的Oracle编码有限。我继承了一堆需要转换为ANSI的视图。我正在寻找的是一个人,如果可能的话,以系统的方式逐步教育我。我有大三学生会阅读和理解TSQL样式代码,而不是原来的样子。我想利用这些知识,并让他们开始研究它们。有许多。转换工具将无法使用,我们没有时间玩,没有预算购买,而且我们的IT部门不会让我们安装任何东西。 (我们必须手动执行此操作)

我想了解基于解释代码的步骤(系统的方法),而不是学习数据或尝试理解为什么现有代码是这样编写的。

例如,这些步骤是:

  1. 对表进行重新排序以匹配where子句中的样式。
  2. 根据表的位置将where子句中的行分开,以便于阅读。
  3. 用左,右,外等替换Oracle联接运算符。
  4. 将具有定义值的行保留在where子句中,或者在表连接中将其包含“ AND”的行。

此任务将由初级SQL Server管理员完成,因此它必须尽可能简单明了。

FROM WORK MECHANISMS WM,
           WT_MANPOWER_RESOURCES WTMR,
           LOGICAL_ITEMS LI,
           APSWHS.WMX_LOG_REL_ELEM WLRE,
           WMECH_DSGN_COMP_ELEMENTS WDCE,
           WORK_TASKS WT,
           persons_v per,
           APSWHS.WMX_WO_WF_STATUS WFA,
           RT_DETAILS RTD
WHERE
WFA.WF_SEQ > 639
AND WTMR.WTASK_WMECH_DB_ID  = WM.DB_ID
AND WTMR.WTASK_DB_ID  = 0
AND WTMR.WTMANPOW_TYPE  = ‘LEAD’
AND WT.WMECH_DB_ID = WM.DB_ID
AND WT. DB_ID= 0
AND WFA.WM_DB_ID = WM.DB_ID
AND PER.per_db_id  = wm.assigned_to_per_db_id
AND RTD.WMECH_DB_ID  = WM.DB_ID
AND WDCE .WMECH_DB_ID  = WFA.WM_DB_ID
AND WDCE.LITM_ID = WLRE.LITM_ID 
AND WDCE.LITM_ID = LI.ID 
AND WDCE.PRIMARY_DCID_FLAG  = ‘Y’

1 个答案:

答案 0 :(得分:1)

我假设您要从表列表(WHERE子句中的联接谓词)迁移到ANSI JOIN语法。这与T-SQL无关。

理想情况下,您将获得ERD并以可视方式检查应按什么顺序列出表格。我个人觉得这比单纯的文字要容易。虽然,也可以使用纯文本。步骤如下:

获取第一个表及其所有非联接谓词:

FROM WORK_MECHANISMS WM
WHERE 1 = 1 -- No predicates on this table

获取下一个可以联接到第一个表的表,以及它的所有联接谓词和非联接谓词

FROM WORK_MECHANISMS WM
  JOIN WT_MANPOWER_RESOURCES WTMR
    ON WTMR.WTASK_WMECH_DB_ID = WM.DB_ID
WHERE WTMR.WTASK_DB_ID = 0
AND WTRM.WTMANPOW_TYPE = 'LEAD'

还有下一张桌子...

请注意,这不是原始表列表中的下一个表,而是另一个表,即可以在不创建笛卡尔积的情况下连接到现有连接图的下一个表。特别是,我暂时跳过了LOGICAL_ITEMSAPSWHS.WMX_LOG_REL_ELEMWMECH_DSGN_COMP_ELEMENTS。稍后我将它们添加到图中。

FROM WORK_MECHANISMS WM
  JOIN WT_MANPOWER_RESOURCES WTMR
    ON WTMR.WTASK_WMECH_DB_ID = WM.DB_ID
  JOIN WORK_TASKS WT
    ON WT.WMECH_DB_ID = WM.DB_ID
WHERE WTMR.WTASK_DB_ID = 0
AND WTRM.WTMANPOW_TYPE = 'LEAD'
AND WT.DB_ID = 0

还有下一张桌子...

您将继续向新语句中添加表,直到您添加了所有表。如果您遇到过(+)运算符,那么“ just”就可以正确使用LEFT JOIN语义。