我有一个存储过程 返回带有错误的结果集 消息,发生错误时。如果它 执行没有任何错误,结果 set为空(命令已完成 成功)
在vb6方面,我执行sp和
检查是否有错误If Err <> 0 Then ' do sth End If
但是,当有结果集时, Err总是0。
我应该如何处理这种情况?
对于不充分的解释感到抱歉。
以下是我的脚本:
--my sample table
create table #InvoiceDocument (InvoiceID int, ItemID int, Price float, DocStatus bit)
--my test values
insert into #InvoiceDocument (InvoiceID, ItemID, Price)
values (1, 1, 2.5), (1, 2, 5.0), (1,5, null)
--my sample procedure
create procedure sp_ApproveInvoice @InvoiceID int
as
begin
set nocount on
select * into #temp
from #InvoiceDocument
where Price is null and InvoiceID = @InvoiceID
if exists (select 1 from #temp)
begin
select InvoiceID, ItemID, Price from #temp
RAISERROR ('There are non priced items. Invoice can not be approved!',16, 1)
return
end
update #InvoiceDocument
set DocStatus = 1
where InvoiceID = @InvoiceID
end
执行此操作时:
sp_ApproveInvoice 1
它都生成结果集(Results)和错误消息(Messages)。
在vb6方面,vb6无法在此处捕获错误。
答案 0 :(得分:4)
您需要在存储过程中使用RAISERROR来设置错误。
或使用输出参数。或RETURN语句
或添加逻辑以区分客户端代码中的“成功”和“失败”记录集。
目前,Err
没有意义,因为没有错误状态
我个人使用RAISERROR question here this template
答案 1 :(得分:4)
您的特定情况无法被Err
捕获,因为您的存储过程不会产生传统意义上的任何错误 - 它要么给出空结果集,要么给出正常结果集。 VB如何知道非空结果集的语义?
要使其工作,您需要更改存储过程以引发错误,或者您需要直接在代码中检查存储过程返回的结果集(与Err无关)。