环境delphi 5,sql server 2000,windows professional 2000,cs 结构
服务器端:
create procedure sp_child
as
select 1
gocreate procedure sp_parent
as
exec sp_child
raiserror 333333 'test'
go客户端:
Query1.close;
Query1.sql.text := ‘exec sp_parent’;
Query1.open;我这里的执行结果是前台不会报错,但如果修改为
create procedure sp_parent
as
raiserror 333333 'test'
go
就会报错.
BDE和ADO都是同样的结果为什么不会报错呢?

解决方案 »

  1.   

    create procedure sp_parent
    as
    raiserror 333333 'test'
    go
    create procedure sp_parent
    as
    exec sp_child
    raiserror 333333 'test'
    go这俩个SP在查询分析器里都报错的阿
      

  2.   

    在查询分析器是报错,但是到了delphi里面就不报错了。
    我就是不明白为什么。
      

  3.   

    如果sp_parent里有exec sp_child,捕捉不到
    如果没有exec sp_child,可以捕捉到
      

  4.   

    无论是bde的tquery或ado的tadoquery都只能执行单条sql语句,不能执行sql脚本,可参考
    http://community.csdn.net/Expert/topic/4616/4616830.xml?temp=.8273889
      

  5.   

    我的tquery执行的就  exec sp_parent 这么一条语句啊
      

  6.   

    create procedure sp_parent
    as
    exec sp_child
    raiserror 333333 'test'
    go如果在raiserror前面有select出数据的话,Delphi就不会报错了,不论你后面执行什么东西。虽然也执行了。你可以通过往表中写数据来查看执行结果。但是如果select在raiserror之后的话就肯定会报错。总之,在raiserror之前有select出数据,就不会报错,否则,就会报错。
      

  7.   

    mastersky(浪) :
    我测试了
    将存储过程作以下修改alter procedure sp_parent  
    as  
    create table #t(i int)
    insert into #t  values(100)
    select * from #t where i= 123
    raiserror 333333 'test'这样前台还是捕捉不到异常,说明只要成功执行了select 语句,就不会报错。这可怎么办啊,不可能不执行select语句啊
      

  8.   

    我以前也遇到过类似的问题,是RAISERROR产生的错误级别不够了
    raiserror('Unrecognized parm value.',16,0) 看看
      

  9.   

    我也用delphi,不过没看懂,帮UP一下。