2017-05-13 22 views
3
私はしかし、私はこのエラー

無効な列名「 - 」

無効な列名を持って自分のコンピュータ上のSQL Server Express Editionを使用してvb.netアプリケーションから次のクエリを実行しようとしています

「 - 」。私はMSDNで文書化されているように、それが正常に動作する必要があることだと思う選択したフィールドの一部の間で減算を実行するために、文字 - 「」私が使用したクエリで

。ここで

はクエリです:エラーは、このによって引き起こされるよう

SELECT 
    r.ID AS [المعرّف], 
    ch.ID AS [معرّف القيمة], 
    r.active AS مفعّل, 
    en.ename AS [الموتور], 
    b.location AS [عنوان العلبة], 
    c.clientname AS [المشترك], 
    p.ampere AS [أمبير], 
    cl.fullname AS [الجابي], 
    b.code AS [رمز العلبة], 
    ec.code AS [الرمز في العلبة], 
    ch.previousvalue AS [القيمة السابقة], 
    ch.currentvalue AS [القيمة الحاليّة], 
    r.insurance AS [تأمين], 
    (
     (
      SELECT SUM(total) 
      FROM CounterHistory coh 
      WHERE coh.regid = r.ID 
       AND (
        coh.cyear < 2017 
        OR (
         coh.cmonth < 5 
         AND coh.cyear = 2017 
         ) 
        ) 
      ) - (
      SELECT IsNull(Sum(pyy.pvalue), 0) 
      FROM CounterHistory coh, 
       Payment pyy 
      WHERE pyy.counterhistoryid = coh.ID 
       AND coh.regid = r.ID 
       AND (
        coh.cyear < 2017 
        OR (
         coh.cmonth < 5 
         AND coh.cyear = 2017 
         ) 
        ) 
      ) 
     ) AS [مكسورات], 
    ch.notes AS ملاحظات, 
    (ar.caption & "-" & ch.cyear) AS [شهر], 
    (b.code & ec.code) AS [رمز مفتاح], 
    ch.monthlyfee AS [رسم اشتراك], 
    (ch.currentvalue - ch.previousvalue) AS [فرق عداد], 
    ch.kilowattprice AS [سعر الكيلو], 
    (((ch.currentvalue - ch.previousvalue) * ch.kilowattprice) + roundvalue) AS [مطلوب كيلو], 
    total + discount AS [المجموع], 
    discount AS [حسم], 
    (
     SELECT IsNull(Sum(pyy.pvalue), 0) 
     FROM CounterHistory coh, 
      Payment pyy 
     WHERE pyy.counterhistoryid = coh.ID 
      AND coh.regid = r.ID 
      AND coh.cmonth = 5 
      AND coh.cyear = 2017 
     ) AS [مدفوع], 
    (
     total - (
      SELECT IsNull(Sum(pyy.pvalue), 0) 
      FROM CounterHistory coh, 
       Payment pyy 
      WHERE pyy.counterhistoryid = coh.ID 
       AND coh.regid = r.ID 
       AND coh.cmonth = 5 
       AND coh.cyear = 2017 
      ) - discount 
     ) AS [باقي] 
FROM 
    Registration r, 
    Client c, 
    ElectricBox b, 
    ECounter ec, 
    CounterHistory ch, 
    Package p, 
    Engine en, 
    Collector cl, 
    ArabicMonth ar 
WHERE 
    r.packageid = p.ID 
    AND ch.cmonth = ar.ID 
    AND r.counterid = ec.ID 
    AND ec.boxid = b.ID 
    AND r.clientid = c.ID 
    AND ch.regid = r.ID 
    AND b.engineid = en.ID 
    AND b.collectorid = cl.ID 
    AND ch.cmonth = 5 
    AND ch.cyear = 2017 
    AND (
     DatePart("yyyy", r.registrationdate) < 2017 
     OR (
      DatePart("m", r.registrationdate) <= 5 
      AND DatePart("yyyy", r.registrationdate) = 2017 
      ) 
     ) 
ORDER BY 
    cl.fullname, 
    b.code, 
    ec.code 
+0

コードを書式設定しないでください。読んでもそれほど簡単ではありませんか? –

+0

申し訳ありませんが、SQLコードをどのようにフォーマットするのか分かりません。どうすればいいですか?ありがとう!! –

+2

あなたの問題は、あなたの文字列に '' 'の代わりに' ''を使用していると思います。特に '&" - "&' –

答えて

4

はルックス:

:あなたはこのように、連結をするために文字列の '+を使用する必要がありますSQL Serverでの

(ar.caption & "-" & ch.cyear) AS [شهر], 

(ar.caption + '-' + ch.cyear) AS [شهر],