2015-07-10 2 views
0

Я пытается выполнить запрос SQL в Visual Studio asp.net, но я получаю эту ошибку:Ошибка в SQL запросе

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' AND JobID = jn.ID GROUP BY JOBID)) as Delivered, ' at line 1

Но я не могу видеть, где проблема.

private static string SearchSQL 
{ 
    get{ 
     return @" set @sql = null; 
      select 
       group_concat(distinct 
        concat(
         'max(case when PieceType = ''', 
         PieceType, 
         ''' then AdvisedQty end) AS ', 
         concat(PieceType) 
        ) 
       )into @sql 
      FROM customer c 
      LEFT JOIN job_address ja ON c.AccountCode = ja.Code AND c.Company_ID = ja.Company_ID 
      JOIN AddressType jat ON ja.AddressType = jat.ID and jat.Description = ''Debtor'' 
      LEFT JOIN job_new jn ON ja.JobID = jn.ID 
      LEFT JOIN job_pieces jp ON ja.JobID = jp.ID 

    WHERE c.Company_ID = ?compid; 

    set @sql = concat('select 
       c.Name, 
       COUNT(distinct jn.ID) as Jobs, 
       SUM((select COUNT(ID) from jobstat where Status = ''DEL'' AND JobID = jn.ID GROUP BY JOBID)) as Delivered, 
       SUM((select COUNT(ID) from jobstat where Status = ''POD'' AND JobID = jn.ID GROUP BY JobID)) as POD, 
       (select COUNT(job_debriefs.ID) from job_debriefs WHERE JobID = jn.JobNo) as Debriefs, 
       sum(jn.OutTurn) as Outturn, 
       SUM(jn.ActualWeight) as GrossWt, 
       SUM(jn.CBM) as CBM, 
       jn.Department, 
       (SELECT Name FROM job_address WHERE AddressType =3 AND JobID = jn.ID) as CollectName, 
       (SELECT Name FROM job_address WHERE AddressType =2 AND JobID = jn.ID) as DeliverName, 
       ', @sql, ' 
      FROM customer c 
      LEFT JOIN job_address ja ON c.AccountCode = ja.Code AND c.Company_ID = ja.Company_ID 
      JOIN AddressType jat ON ja.AddressType = jat.ID and jat.Description = ''Debtor'' 
      LEFT JOIN job_new jn ON ja.JobID = jn.ID 
      LEFT JOIN job_pieces jp ON ja.JobID = jp.ID 

    WHERE c.Company_ID = ?compid 
    GROUP BY c.ID'); 

    prepare stmt from @sql; 
    execute stmt; 
    deallocate prepare stmt; 
          "; 
     } 
    } 

Ok Я установил одиночные кавычки, но теперь ошибка подходя является:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?compid GROUP BY c.ID' at line 19

Он находит CompID так это еще не проблема

+0

вы можете получить более полезное сообщение об ошибке, если вы попытаетесь напрямую запустить SQL-код в своей СУБД. –

+0

@TheTTGGuy Я попытался выполнить запрос в MySQL Workbench, но это дало ошибку: 'Код ошибки: 1064. У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с max (случай, когда PieceType = «Carton», а затем конец AdvisedQty). AS Carton, max (случай, когда «в строке 13» – user123456789

+0

есть причина, по которой вы есть две скобки вокруг этой строки? Вам может понадобиться только одна (это может быть не проблема, но попробовать ее с помощью одиночных парнеров) – nomistic

ответ

0

Вы все еще внутри строкового литерала здесь вам нужно удвоить одиночные кавычки, чтобы избежать их по значению DEL перед выдержкой в ​​сообщении об ошибке:

SUM((select COUNT(ID) from jobstat where Status = ''DEL'' AND JobID = jn.ID GROUP BY JOBID)) as Delivered, 
SUM((select COUNT(ID) from jobstat where Status = ''POD'' AND JobID = jn.ID GROUP BY JobID)) as POD, 
+0

Должен ли я сделать это для '' Debtor'' '? – user123456789

+0

Возможно, вы делаете. –

+0

ok спасибо. Но есть еще одна ошибка : 'near '? compid GROUP BY c.ID'' – user123456789

Смежные вопросы