如果你用varchar\char型的变量,由于只能到8000字符,所以就会被截断,sql语句不会那么小的,只是字符串被截断了,不过我估计没那么长的吧,估计你语句里有换行,这样就有可能空行也被算进去了,你可以print一下,去除空行和回车,应该可以

解决方案 »

  1.   

    varchar\char最长8000
    nvarchar最长4000
    你的sql语句太长拉,是不是有换行,是不是有太多空格,你先简化一下实在不行,可以
    把语句分开写EXEC(@SQL1+@SQL2+@SQL3)
      

  2.   

    可以把sql语句换行用加号连接,delphi里面也规定了一行的长度,可以用换行的方法解决
      ss := 'select b.nva_prod_num int_exmi_prid,a.nva_exmi_prna,a.nva_exmi_prsp,a.int_exmi_how, '
          + 'c.nva_meas_enam sUnit,d.nva_mone_enam sMoneyKind,a.mon_exmi_unit,a.mon_exmi_orig, '
          + 'a.mon_exmi_rmb,a.mon_exmi_tota,a.nte_exmi_rame from t_export_minu a '
          + 'left join t_product_info b on a.int_exmi_prid = b.int_prod_id and b.bit_prod_stat = 1 '
          + 'left join t_meas_unit c on a.int_exmi_mein = c.int_meas_id  and c.bit_meas_stat = 1 '
          + 'left join t_money_info d on a.int_exmi_moid = d.int_mome_id and d.bit_mone_stat = 1 '
          + 'where a.bit_exmi_stat = 1 and int_exmi_exid ='+ '''' + strcompact + ''''  ;
      Cds_mx.Active := false ;
      Cds_mx.CommandText := ss ;
      Cds_mx.Active := true ;
      

  3.   

    过长的语句可以寸到一张临时表中,再与原来的表进行inner join
      

  4.   

    只要沒有太多空行,你的語句應該不會超過長度限制的
    我曾見過一万多行的sql server語句執行沒問題
      

  5.   

    我曾見過一万多行的sql server語句執行沒問題
    --------
    如果楼主将他们存到@sql变量里面就存不下了,有8000的限制。