【问题标题】:Change SQL statement Oracle to SQL Server将 SQL 语句 Oracle 更改为 SQL Server
【发布时间】:2023-04-09 03:25:02
【问题描述】:

我想知道如何将 SQL 语句从 Oracle 更改为 SQL Server。 但是,发生错误

关键字“AS”附近的语法无效

不知道为什么会出错。

SELECT A.DMND_NO
    , A.DMND_R_ID
    , C.EMP_NO
    , C.USER_NM
    , CASE WHEN C.TYPE_CD = '01' THEN C.DEPT_CD ELSE C.VENDOR_CD END AS DEPT_CD
    , CONVERT(VARCHAR(20), A.ATH_DMND_DTM, 120) AS ATH_DMND_DTM
    , CONVERT(VARCHAR(20), A.APRV_DTM, 120) AS APRV_DTM, A.APVR_ID
    , ISNULL(D.USER_NM, A.APVR_ID) AS APRV_NM
    , C.TYPE_CD
    , I.CODE_NM AS REQ_GB
FROM TB_SY_ATHDMND A RIGHT OUTER JOIN TB_SY_USER D
    ON A.APVR_ID = D.USER_ID
    , TB_SY_USER C RIGHT OUTER JOIN TB_SY_DEPT F
    ON C.DEPT_CD = F.DEPT_CD
    , TB_SY_ATHDMNDDET B
    , (SELECT COMP_CD, CODE_CD, CODE_NM FROM TB_SY_CODE WHERE CLS_ID = 'COM_CLS_0049' AND USE_CD = 'Y') I
WHERE A.DMND_NO = B.DMND_NO
    AND A.DMND_R_ID = C.USER_ID
    AND A.DMND_COMP_CD = I.COMP_CD
    AND C.TYPE_CD = I.CODE_CD
    AND A.PRGR_STAT_CD = '03'
    AND B.ATH_DVCD = 'U'           
 
    AND A.DMND_COMP_CD = #{gCOMP_CD}
<if test='SEARCHDT_FROM != null and !SEARCHDT_FROM.equals("") and SEARCHDT_TO != null and !SEARCHDT_TO.equals("")'>
    AND A.APRV_DTM BETWEEN CONVERT(VARCHAR(8), A.ATH_DMND_DTM, 112) AS ATH_DMND_DTM AND CONVERT(VARCHAR(20), A.APRV_DTM, 120) AS APRV_DTM
</if>          
<if test='TYPE_CD != null and !TYPE_CD.equals("")'>      
    AND C.TYPE_CD = #{TYPE_CD}
</if>
<if test='USER_NM != null and !USER_NM.equals("")'>      
    AND C.USER_NM = #{USER_NM}
</if>
ORDER BY A.APRV_DTM DESC, A.DMND_NO DESC

【问题讨论】:

    标签: sql sql-server oracle porting


    【解决方案1】:

    我不确定,但您是否尝试使用像使用一个字符空间而不是 AS 的语法?

    , CASE WHEN C.TYPE_CD = '01' THEN C.DEPT_CD ELSE C.VENDOR_CD END  DEPT_CD
    , CONVERT(VARCHAR(20), A.ATH_DMND_DTM, 120)  ATH_DMND_DTM
    , CONVERT(VARCHAR(20), A.APRV_DTM, 120)  APRV_DTM, A.APVR_ID
    , ISNULL(D.USER_NM, A.APVR_ID)  APRV_NM
    

    在 Oracle/PLSQL 中 ALIAS A TABLE 的语法是:table_name alias_name

    如您所知,AS 是可选的。

    【讨论】:

      【解决方案2】:

      我认为您的代码中有两个地方存在问题。

      应从FROM 子句中删除额外的,

      FROM TB_SY_ATHDMND A RIGHT OUTER JOIN TB_SY_USER D
          ON A.APVR_ID = D.USER_ID
          , TB_SY_USER C RIGHT OUTER JOIN TB_SY_DEPT F -- , at the start is not needed -- remove it
          ON C.DEPT_CD = F.DEPT_CD
          , TB_SY_ATHDMNDDET B -- , at the start is not needed -- remove it
          , (SELECT COMP_CD, CODE_CD, CODE_NM FROM TB_SY_CODE WHERE CLS_ID = 'COM_CLS_0049' AND USE_CD = 'Y') I -- , at the start is not needed -- remove it
      

      AS 不应在WHERE 子句条件中使用。

      从以下代码中删除 AS ATH_DMND_DTMAS APRV_DTM

      <if test='SEARCHDT_FROM != null and !SEARCHDT_FROM.equals("") and SEARCHDT_TO != null and !SEARCHDT_TO.equals("")'>
          AND A.APRV_DTM BETWEEN CONVERT(VARCHAR(8), A.ATH_DMND_DTM, 112) AS ATH_DMND_DTM AND CONVERT(VARCHAR(20), A.APRV_DTM, 120) AS APRV_DTM
      </if>  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-15
        • 2015-11-26
        • 1970-01-01
        • 2011-04-28
        • 1970-01-01
        • 2013-04-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多