public IList retrieveNewTrans(TranslineFilter filter)
        {
            string str = "EX686";
            string sHql = " select into NewTransline  p0 from (select count(TraId),Oilcarrier,Tradate,Equipcode,Class,IssueToEamcode,OiltypeEamStore,OiltypeEamBin,sum(Oilqtyvolume),sum(Oilqty),EvttypeDesc,Oilingcheck,Oiledcheck,Eamsydn  from Transline where Equipcode='" + str + "' group by Equipcode) ";
            sHql += " where 1=1 ";
            if (filter.TranType != null && filter.TranType.Trim() != string.Empty)
            {
                sHql += " and p0.Evttype = '" + filter.TranType + "'";
            }
            if (filter.Trandept != null && filter.Trandept.Trim() != string.Empty && filter.Trandept != "*")
            {
                sHql += " and p1.CarDept like '" + filter.Trandept + "%'";
            }
            if (filter.StartDate != null)
            {
                sHql += " and p0.Tradate >= to_date('" + filter.StartDate.ToString() + "','yyyy-MM-dd HH24:mi:ss') ";
            }
            if (filter.FinishDate != null)
            {
                sHql += " and p0.Tradate <= to_date('" + filter.FinishDate.ToString() + "','yyyy-MM-dd HH24:mi:ss') ";
            }
            if (filter.TranEmp != null && filter.TranEmp.Trim() != string.Empty)
            {
                sHql += " and p0.Empcode = '" + filter.TranEmp + "'";
            }
            if (filter.TranCarcode != null && filter.TranCarcode.Trim() != string.Empty)
            {
                sHql += " and p1.CarCode = '" + filter.TranCarcode + "'";
            }
            if (filter.TranOiltype != null && filter.TranOiltype.Trim() != string.Empty)
            {
                sHql += " and p0.Oiltype = '" + filter.TranOiltype + "'";
            }            sHql += " and p0.Oilqty > 0)";
            return control.GetEntities(sHql);
        }
语句有错,求高手指点。

解决方案 »

  1.   

    想实现的功能是: 把一张老表的数据查出来在分组,在插入新表,NewTransline  是新表,from后面的子查询是老表。调试后吧生成的语句在sql执行说缺少表达式  在select后面
      

  2.   

    插入新表是这样写的SELECT  * INTO NewTransline FROM tableA 
      

  3.   

    select 后面我加了,还是报引发类型为“Antlr.Runtime.NoViableAltException”的异常 这个错误。
      

  4.   

    用上面的语句插入新表,这个语句没执行前,这个表是不存在的,换句话说,sql语句执行成功了才会有这个表,而你后面给新表字段进行处理。我估计问题在这里
      

  5.   

    你如果要插入到一个已建立好的表中sql语句
    这样写INSERT  INTO NewTransline  SELECT * FROM tableA 
      

  6.   

    生成的SQL语句是这样的: insert  into NewTransline (TraId,Oilcarrier,Tradate,Equipcode,Class,IssueToEamcode,OiltypeEamStore,OiltypeEamBin,Oilqtyvolume,Oilqty,EvttypeDesc,
     Oilingcheck,Oiledcheck,Eamsydn) p0  (select count(TraId),Oilcarrier,Tradate,Equipcode,Class,IssueToEamcode,OiltypeEamStore,OiltypeEamBin,
     sum(Oilqtyvolume),sum(Oilqty),EvttypeDesc,Oilingcheck,Oiledcheck,Eamsydn  from Transline where Equipcode='EX686' group by Equipcode)  where 1=1
       and p0.Evttype = 'OILING' and p1.CarDept like '33021409%' and p0.Tradate >= to_date('2012-4-7 10:00:27','yyyy-MM-dd HH24:mi:ss') 
      and p0.Tradate <= to_date('2012-4-8 10:00:27','yyyy-MM-dd HH24:mi:ss')  and p0.Oilqty > 0)
      

  7.   

    这个生成的SQL  感觉没什么问题啊...
      

  8.   

     insert  into NewTransline p0 (TraId,Oilcarrier,Tradate,Equipcode,Class,IssueToEamcode,OiltypeEamStore,OiltypeEamBin,Oilqtyvolume,Oilqty,EvttypeDesc,
     Oilingcheck,Oiledcheck,Eamsydn)    values   (select count(TraId),Oilcarrier,Tradate,Equipcode,Class,IssueToEamcode,OiltypeEamStore,OiltypeEamBin,
     sum(Oilqtyvolume),sum(Oilqty),EvttypeDesc,Oilingcheck,Oiledcheck,Eamsydn  from Transline where Equipcode='EX686' group by Equipcode)  where 1=1
       and p0.Evttype = 'OILING' and p1.CarDept like '33021409%' and p0.Tradate >= to_date('2012-4-7 10:00:27','yyyy-MM-dd HH24:mi:ss') 
      and p0.Tradate <= to_date('2012-4-8 10:00:27','yyyy-MM-dd HH24:mi:ss')  and p0.Oilqty > 0)
    说values 后面缺少表达式?
      

  9.   

    你怎么又有values了呢,不是给你说了要这样写吗?
    INSERT INTO NewTransline SELECT * FROM tableA 
    你把你的表数据贴出来我给你看看
      

  10.   

    - -#  关键我不加values  他在查询分析器里面提示缺少values  加了说缺少表达式...values (2531, 513, '(null)', 'FT127', '000001', '000001', 0, 754.81, to_date('18-12-2010 09:59:22', 'dd-mm-yyyy hh24:mi:ss'), 513, 'OILING', '000001', '(null)', 'HT4509', '0001', 0.86, 0.16684, 194, to_date('18-12-2010 09:59:23', 'dd-mm-yyyy hh24:mi:ss'), to_date('18-12-2010 10:00:39', 'dd-mm-yyyy hh24:mi:ss'), '-', '330220', to_date('18-12-2010 09:59:23', 'dd-mm-yyyy hh24:mi:ss'), '000001', to_date('20-12-2010 20:37:11', 'dd-mm-yyyy hh24:mi:ss'), '000001', 0, 754.81, '3c9e09af040804006263646566676869', '3c9e09af040804006263646566676869', '3c9e09af040804006263646566676869', '330214', 0, '0001', 'A', 'B', 'ZB', 'ZB', '-', '-', '', '-', null, '', '', '', '33021414', null, null, 0, '', 0, 0, null, '0');
      

  11.   

    Test Data ,自己看看
    CREATE TABLE A
    (
      a01  INT,
      a02  VARCHAR(10)  )
    INSERT INTO A
        
    SELECT 1,'haha'    UNION ALL
    SELECT 2,'gaga'   UNION ALL
    SELECT 3,'jiji' CREATE TABLE C
    (
      c01  INT,
      c02  VARCHAR(10)  )
    --DROP TABLE C
    INSERT  INTO C SELECT * FROM A 
    SELECT * FROM C
    /*(所影响的行数为 3 行)c01         c02        
    ----------- ---------- 
    1           haha
    2           gaga
    3           jiji(所影响的行数为 3 行)
    */
      

  12.   

    如最上面的,SQL的 这个我看了 但是我程序用的事nhibernate语句...所以我想问的是 我最上面的方法是不是有问题。
      

  13.   

     public IList retrieveNewTrans(TranslineFilter filter)
            {
                string str = "EX686";
                string sHql = " insert  into NewTransline p0 (TraId,Oilcarrier,Tradate,Equipcode,Class,IssueToEamcode,OiltypeEamStore,OiltypeEamBin,Oilqtyvolume,Oilqty,EvttypeDesc,Oilingcheck,Oiledcheck,Eamsydn)   (select count(TraId),Oilcarrier,Tradate,Equipcode,Class,IssueToEamcode,OiltypeEamStore,OiltypeEamBin,sum(Oilqtyvolume),sum(Oilqty),EvttypeDesc,Oilingcheck,Oiledcheck,Eamsydn  from Transline where Equipcode='" + str + "' group by Equipcode) ";
                sHql += " where 1=1 ";
                if (filter.TranType != null && filter.TranType.Trim() != string.Empty)
                {
                    sHql += " and p0.Evttype = '" + filter.TranType + "'";
                }
                if (filter.Trandept != null && filter.Trandept.Trim() != string.Empty && filter.Trandept != "*")
                {
                    sHql += " and p1.CarDept like '" + filter.Trandept + "%'";
                }
                if (filter.StartDate != null)
                {
                    sHql += " and p0.Tradate >= to_date('" + filter.StartDate.ToString() + "','yyyy-MM-dd HH24:mi:ss') ";
                }
                if (filter.FinishDate != null)
                {
                    sHql += " and p0.Tradate <= to_date('" + filter.FinishDate.ToString() + "','yyyy-MM-dd HH24:mi:ss') ";
                }
                if (filter.TranEmp != null && filter.TranEmp.Trim() != string.Empty)
                {
                    sHql += " and p0.Empcode = '" + filter.TranEmp + "'";
                }
                if (filter.TranCarcode != null && filter.TranCarcode.Trim() != string.Empty)
                {
                    sHql += " and p1.CarCode = '" + filter.TranCarcode + "'";
                }
                if (filter.TranOiltype != null && filter.TranOiltype.Trim() != string.Empty)
                {
                    sHql += " and p0.Oiltype = '" + filter.TranOiltype + "'";
                }            sHql += " and p0.Oilqty > 0)";
                return control.GetEntities(sHql);
            }方法是这个。
      

  14.   

    方法我不知道有没有问题,你最上面的sql语句是有问题的,nhibernate用sql不是一样的吗?
      

  15.   

    因为我怕的是 nhibernate 有的语句 sql 不支持 比如这种的insert into  select