2011-10-25 13 views
-2

私が私に与えられた特定のクエリに問題があると私はその問題を解決する方法がわからない...ここでは、クエリ..ですSQL Server 2008 R2のクエリエラー:付近に正しくない構文に「:」

SELECT dcm.code DCM_No, 
     dcm.datetime_created DCM_Date, 
     lne.seq_number, 
     par.code, 
     par.description particular, 
     ft.description fee_type, 
    lne.amount, 
     case when lne.drcr =1 then 'Debit' else 'Credit' end DrCr, 

     case when isnull(dcm.is_sd,'N') = 'Y' then 'Salary Deduction' else null end is_sd, 
     org.description Company, 
     org.postal_address company_addr, 
     'S.Y. ' + substring(sy.school_year,1,4)+'-'+substring(sy.school_year,5,4) +' '+sem.description SY, 
     entity_a.code + ' - ' + coalesce(entity_a.stud_lname,'') +', '+coalesce(entity_a.stud_fname,'') +' '+coalesce(entity_a.stud_mname,'') Student, 

    case when isnull(dm.description2,'') = '' then 
       crs.course_short_name + '-'+convert(char(1),entity_a.stud_grade) 
     else crs2.course_short_name + '-'+convert(char(1),reg.stud_grade) end as Course, 
     isnull(dm.description2,'Not Enrolled') 

    FROM es.lib_rgn_students entity_a 
     left join ars.ars_dcm dcm on dcm.entity_id = entity_a.id 
     LEFT JOIN afs.entity entity_b ON dcm.prepared_by_id = entity_b.id 
     LEFT JOIN ua.user_account ON dcm.prepared_by_id = ua.user_account.id 
     left join ars.ars_dcm_line lne on lne.ars_dcm_id = dcm.id 
     left join es.lib_fin_fees_master par on par.id = lne.ars_particular_id 
     left join es.lib_fin_feetype ft on ft.code = lne.fee_code 
     left join es.stp_sysem sy on sy.id = dcm.period_id 
     inner join es.stp_semesterms sem on sem.code = sy.semester and sem.trimester = 0 
     inner join afs.organization org on org.id = sy.company_id 
     inner join es.lib_crs crs on crs.id = entity_a.course_id 
     left join es.trn_rgn_reg_hdr reg on reg.period = sy.id and reg.stud_id = :as_studid 
     left join document_status_map dm on dm.code = reg.document_status 
     left join es.lib_crs crs2 on crs2.id = reg.course_id 

    WHERE 
     (dcm.entity_id = :as_studid) AND 
     (dcm.period_id = :as_period) AND 
     (dcm.document_status_code not in(2,3))  

と、私はこのエラーを持っている:

Incorrect syntax near ':'.

のplsは私がこれでよくないよ助け:(

おかげ

+1

管理スタジオで実行します。エラーメッセージをダブルクリックします。 'reg.stud_id =:as_studid'が問題であることを示しています。パラメータを使用しようとしている場合、これらは '@'接頭辞をTSQLに持ちます。 –

+0

私はこの問題をどうしたらいいのかわかりません:(私は ":"について何かすべきなのですか?> _ < – ravenxi

+1

あなたのお話に基づいてどうやって知っているのですか?列の名前?もしそれがRossの答えに従って区切っていれば、それはパラメータであると思われますか?それは '@'接頭辞付きのTSQLパラメータとして宣言します –

答えて

1

を修正する必要があり

WHERE 
     (dcm.entity_id = [:as_studid]) AND 
     (dcm.period_id = [:as_period]) AND 
     (dcm.document_status_code not in(2,3))  

:as_studid:as_period物事は、いくつかのクライアントソフトウェアによって使用されるように、このクエリの最も可能性の高いパラメータです。クエリが実際に実行される前に、@P1またはおそらく@as_studidのようなもので:nameビットが置き換えられ(通常は中間層ソフトウェアによって)、サーバは決してコロンをそこに見ることはありません。

クライアントソフトウェア開発者でなく、単にクエリで何かをするタスクが割り当てられている場合は、上記の変換を手動で適用する必要があります。変数@as_studid@as_periodを宣言し、それぞれ:as_studid:as_periodの代わりに使用することをお勧めします。また、それらにいくつかの値を割り当てる必要があるかもしれないので、クエリを実行するときにいくつかの結果を見ることができます。ただ、いくつかの(本当の)値で:as_studid:as_periodを交換、またはあなたが変数を使用せずに行うことができ

DECLARE 
    @as_studid int, 
    @as_period int; /* those are just my guesses, the actual types 
         might need to be something other than int */ 

SET @as_studid = 10; 
SET @as_period = 20; /* again, those are arbitrary values off the top 
         of my head but you might have to discover some 
         real ones before going on */ 

SELECT dcm.code DCM_No, 
     dcm.datetime_created DCM_Date, 
     lne.seq_number, 
     par.code, 
     par.description particular, 
     ft.description fee_type, 
    lne.amount, 
     case when lne.drcr =1 then 'Debit' else 'Credit' end DrCr, 

     case when isnull(dcm.is_sd,'N') = 'Y' then 'Salary Deduction' else null end is_sd, 
     org.description Company, 
     org.postal_address company_addr, 
     'S.Y. ' + substring(sy.school_year,1,4)+'-'+substring(sy.school_year,5,4) +' '+sem.description SY, 
     entity_a.code + ' - ' + coalesce(entity_a.stud_lname,'') +', '+coalesce(entity_a.stud_fname,'') +' '+coalesce(entity_a.stud_mname,'') Student, 

    case when isnull(dm.description2,'') = '' then 
      crs.course_short_name + '-'+convert(char(1),entity_a.stud_grade) 
     else crs2.course_short_name + '-'+convert(char(1),reg.stud_grade) end as Course, 
     isnull(dm.description2,'Not Enrolled') 

    FROM es.lib_rgn_students entity_a 
     left join ars.ars_dcm dcm on dcm.entity_id = entity_a.id 
     LEFT JOIN afs.entity entity_b ON dcm.prepared_by_id = entity_b.id 
     LEFT JOIN ua.user_account ON dcm.prepared_by_id = ua.user_account.id 
     left join ars.ars_dcm_line lne on lne.ars_dcm_id = dcm.id 
     left join es.lib_fin_fees_master par on par.id = lne.ars_particular_id 
     left join es.lib_fin_feetype ft on ft.code = lne.fee_code 
     left join es.stp_sysem sy on sy.id = dcm.period_id 
     inner join es.stp_semesterms sem on sem.code = sy.semester and sem.trimester = 0 
     inner join afs.organization org on org.id = sy.company_id 
     inner join es.lib_crs crs on crs.id = entity_a.course_id 
     left join es.trn_rgn_reg_hdr reg on reg.period = sy.id and reg.stud_id = :as_studid 
     left join document_status_map dm on dm.code = reg.document_status 
     left join es.lib_crs crs2 on crs2.id = reg.course_id 

WHERE 
     (dcm.entity_id = @as_studid) AND -- the vars declared above are used 
     (dcm.period_id = @as_period) AND -- here instead of the ':'-bits 
     (dcm.document_status_code not in(2,3)) 

:ここで変更したスクリプトは次のようにどのように見えるかの例を示します。しかし、元のクエリで正確に何がパラメータ化されたのかを覚えておく必要があります。クエリ自体を変更するタスクであれば、あなたのように:という名前でサブミットする必要があるかもしれませんそれを受け取った。

+0

ありがとう!これについて約2日間は今..私は実際に何が起こっているエラーで何をするか分からない..私はこれについて多くのアイデアを持っていない..私はこれを行うに割り当てられていた..あなたは人生を保存するありがとうございました:D – ravenxi

0

をあなたの場合は!列は本当に呼び出されます:as_studidそれを大括弧で囲みます。 e.g.:-問題に

関連する問題