我用.net 2005链接oracle9i,一sql语句在plsql中执行没问题,可放在.net中执行就会出错,报“oracle 00972 标识过长”,语句如下:
“select c,(select b from table2 where table2.a=table1.a) as b from table1”
,如果我把子查询去掉就没问题,如(select c from table1),急啊!

解决方案 »

  1.   

    改为:
    select table1.c, table2.b from table1,table2 where table2.a=table1.a
      

  2.   

    (select b from table2 where table2.a=table1.a)--- 数据库中的对象名称长度要求<=30个字符select c,(select b from table2 where table2.a=table1.a) as b from table1select t1.c,t2.b
      from table1 t1,
           table2 t2
     where t1.a = t2.a
      

  3.   

    可我在plsql中可以执行啊
    要这样改的话工作量太大了
    都要改
      

  4.   

    建立了索引以后这个效率会比你的高吧
    select table1.c, table2.b from table1,table2 where table2.a=table1.a
      

  5.   

    谁能告诉我,我的sql语句有什么问题
      

  6.   

    可我在plsql中可以执行啊
    要这样改的话工作量太大了
    都要改
    看不出工作量有多大! 就修改SQL语句而已。
      

  7.   

    select s1.c,s2.b
      from table1 s1,
           table2 s2
     where s1.a = s2.a
      

  8.   

    说实在的,好像没见过有楼主这样写的语句,效率应该很低吧。应该跟长度没关系吧,可能是.net不认这种语法。
    建议你还是传统一点用表关联或者子查询放到from后边。
      

  9.   

    你的SQL语句有问题,第一,子查询是性能最差的查询,应该尽量少用。第二,应该坚持的SQL里面使用表和列的别名,特别是表的别名,还是有好处的,最起码代码不会太乱。
      

  10.   

    as
    在oracle中不适用,去了试试,和明显是你选择的字段有问题,oracle把你的语句中的一部分认为是字段名了。
      

  11.   

    看不出来有什么问题,估计和.net有关系吧