2017-03-01 158 views
-2

我下面执行查询,这让我Microsoft SQL Server错误102

SELECT 
    t1.s_reference "Section", 
    t2.m_reference "CourseRef", 
    t2.m_name "CourseName", 
    t3.mi_q02m02 "Aim", 
    t2.m_level "Level", 
    t2.m_start "Start", 
    t2.m_end "End", 
    t2.m_projstudents "Target", 
    COUNT(DISTINCT t4.e_id) "Enrolled" 
FROM 
    isr t3, 
    person t5, 
    department t6, 
    section t1, 
    enrolment t4, 
    course t2 
WHERE 
    t3.mi_id(+)=t2.m_id 
    AND t4.e_module=t2.m_id 
    AND t4.e_student=t5.p_id 
    AND(t2.m_status LIKE '%%'||SUBSTR((TO_CHAR(sysdate,'YYYY')+DECODE(least(to_number(TO_CHAR(sysdate,'mm')),8),8,0,-1)),-2,2) ||'%%') 
    AND t2.m_reference LIKE 'LL%%' 
    AND t4.e_status IN('C','S') 
    AND to_date(t2.m_start,'DD-Mon-RRRR')<=to_date(sysdate,'DD-Mon-RRRR') 
    AND to_date(t2.m_end,'DD-Mon-RRRR')>=to_date(sysdate,'DD-Mon-RRRR') 
    AND t2.m_modulesection=t1.s_id 
    AND t2.m_moduledept=t6.d_id 
    AND NVL(t2.m_close,0)=0 
    AND t3.mi_q02m02 IS NOT NULL 
    AND((
    CASE 
    WHEN((t1.s_reference='LL2a') 
     AND(t2.m_reference LIKE '%W%')) 
    THEN 1 
    ELSE 0 
    END)=0) 
    AND(t2.m_reference!='LL3036E15') 
GROUP BY 
    t1.s_reference, 
    t2.m_reference, 
    t2.m_name, 
    t3.mi_q02m02, 
    t2.m_level, 
    t2.m_start, 
    t2.m_end, 
    t2.m_projstudents, 
    t1.s_reference, 
    t2.m_reference 
ORDER BY 
    t1.s_reference, 
    t2.m_reference 

在执行查询时出错。

Incorrect syntax near ')'. MS SQL Server Error 102 

我在SQL Developer中运行相同的查询,它运行良好。

我试图删除大部分的括号,但仍然没有帮助。 任何想法为什么发生这种情况?

感谢 阿鲁娜

+1

哪一行是一个问题? (删除能够正常工作的代码,并保留尽可能小的问题查询。) – jarlh

+1

(可能)与您的错误无关,但您应该切换到明确的“join”语法,这是自1992年以来的标准! – HoneyBadger

+2

当然你会得到错误。您已编写Oracle代码,并且您正在收到SQL Server错误。您应该使用SQL Server约定编写代码。 –

回答

3

您尝试运行在Microsoft的SQL Server以甲骨文书写的查询。这些产品使用略有不同的SQL方言,这些方面不兼容。例如,DECODE,NVL,TO_CHAR在SQL Server中不可用。您将不得不使用SQL Server函数重新编写查询来替换特定于Oracle的查询(CASECOALESCE,CONVERT)。

1

第一步...全部替换||到字OR

第二步骤

AND(t2.m_status LIKE '%%' || SUBSTR((TO_CHAR(SYSDATE, 'YYYY')+ DECODE(至少(TO_NUMBER(TO_CHAR(SYSDATE , '毫米')),8),8,0,-1)), - 2,2) || '%%')

其中

||'%% ')

是不是一个合格的条件,并且自你已经使用它

第三

t3.mi_id(+)= t2.m_id

你必须重新写入可能是不相关的这

%%

应该只%

+0

我替换了||与或,但我得到无效的关系运算符错误 –

+1

要转换为像to_char等sql服务器语法的东西太多,你需要重写它们。 – maSTAShuFu