环境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都是同样的结果为什么不会报错呢?
服务器端:
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都是同样的结果为什么不会报错呢?
as
raiserror 333333 'test'
go
create procedure sp_parent
as
exec sp_child
raiserror 333333 'test'
go这俩个SP在查询分析器里都报错的阿
我就是不明白为什么。
如果没有exec sp_child,可以捕捉到
http://community.csdn.net/Expert/topic/4616/4616830.xml?temp=.8273889
as
exec sp_child
raiserror 333333 'test'
go如果在raiserror前面有select出数据的话,Delphi就不会报错了,不论你后面执行什么东西。虽然也执行了。你可以通过往表中写数据来查看执行结果。但是如果select在raiserror之后的话就肯定会报错。总之,在raiserror之前有select出数据,就不会报错,否则,就会报错。
我测试了
将存储过程作以下修改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语句啊
raiserror('Unrecognized parm value.',16,0) 看看