2017-03-01 17 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'構文に切り替える必要があります。 – HoneyBadger

+2

もちろん、エラーが発生しています。あなたはOracleコードを書いており、SQL Serverエラーが発生しています。 SQL Serverの規則を使用してコードを記述する必要があります。 –

答えて

3

あなたは、MicrosoftのSQL ServerでOracle用に書かれたクエリを実行しようとしています。これらの製品は、SQLのわずかに異なる方言を使用しますが、これらは互換性がありません。たとえば、DECODE,NVL,TO_CHARはSQL Serverでは使用できません。 Oracle固有のもの(上記のものはCASECOALESCE、)を置き換えるために、SQL Server関数を使用してクエリを書き直す必要があります。

1

第1ステップ...すべてを置換する||単語または

第2工程

AND(t2.m_status LIKE '%%' || SUBSTR((TO_CHAR(SYSDATE、 'YYYY')+ DECODE(少なくとも(TO_NUMBER(TO_CHAR(SYSDATEに、 'MM'))、8)、8,0、-1))、 - 2,2) || '%%')

|| '%% ')

あなたはすでにそれを

を使用するので第三

t3.mi_id(+)資格の条件ではないとは無関係かもしれ=あなたは再記述する必要が

をt2.m_idこの

第四

%%

唯一の問題です

+0

私は||を置き換えましたORを使用していますが、無効な関係演算子エラー –

+1

がto_charなどのSQLサーバー構文に変換するには、あまりにも多くのことを書き直す必要があります。 – maSTAShuFu

関連する問題