以下是我的存储过程create procedure StationInfo_Delete --根据站点ID(StationID)删除数据 StationInfo
@StationID int
with encryption
asbegin transaction--开始事物
declare @errorNumber int--错误
delete SensorInfo where StationID=@StationID 
 set @errorNumber=@errorNumber+@@error--错误累计
delete StationInfo where StationID=@StationID
 set @errorNumber=@errorNumber+@@error--错误累计
if (@errorNumber<>0)
  begin
    print '删除失败!'
    rollback transaction--事物回滚
  end
else
  begin
    print @@error
    print '删除成功!'
    --rollback transaction
    commit transaction--执行事物
  end
go执行 :
execute StationInfo_Delete 1报错
DELETE 语句与 COLUMN REFERENCE 约束 'FK__DataTable__Senso__01142BA1' 冲突。该冲突发生于数据库 'Project2',表 'DataTable', column 'SensorID'。
语句已终止。
服务器: 消息 547,级别 16,状态 1,过程 StationInfo_Delete,行 11
DELETE 语句与 COLUMN REFERENCE 约束 'FK__SensorInf__Stati__7E37BEF6' 冲突。该冲突发生于数据库 'Project2',表 'SensorInfo', column 'StationID'。
语句已终止。
0
删除成功!
补充:我知道我数据库中另外一个表  DataTable  与 SensorInfo 有外键约束  没有考虑进这个存储过程里面。我不明白的是为什么有 错误  但是 @@Erroe 却还是为 0   我也有定义一个declare @errorNumber int  来累加错误,再每一个执行语句后面
set @errorNumber=@errorNumber+@@error--错误累计
但是  @errorNumber也为0.   明明就有错误 ,为什么没有改变呢

解决方案 »

  1.   


    @@ROWCOUNT
    返回受上一语句影响的行数。语法
    @@ROWCOUNT返回类型
    integer注释
    任何不返回行的语句将这一变量设置为 0 ,如 IF 语句。示例
    下面的示例执行 UPDATE 语句并用 @@ROWCOUNT 来检测是否有发生更改的行。UPDATE authors SET au_lname = 'Jones'
    WHERE au_id = '999-888-7777'
    IF @@ROWCOUNT = 0
       print 'Warning: No rows were updated'
      

  2.   


    create procedure StationInfo_Delete --根据站点ID(StationID)删除数据 StationInfo 
    @StationID int 
    with encryption 
    as begin transaction--开始事物 
    declare @errorNumber int--错误 
    delete SensorInfo where StationID=@StationID 
    set @errorNumber=@errorNumber+@@error--错误累计 
    delete StationInfo where StationID=@StationID 
    set @errorNumber=@errorNumber+@@error--错误累计 
    if (@errorNumber <>0) 
      begin
        print '删除失败!' 
        print @@error 
        rollback transaction--事物回滚 
      end 
    else 
      begin 
        print '删除成功!' 
        --rollback transaction 
        commit transaction--执行事物 
      end
    go 执行 : 
    execute StationInfo_Delete 1