Stored procedures Sybase ASE SP可优雅地处理外键约束冲突

Stored procedures Sybase ASE SP可优雅地处理外键约束冲突,stored-procedures,sap-ase,Stored Procedures,Sap Ase,我正试图编写一个Sybase ASE 15存储过程来删除一个客户。删除操作可能由于违反外键约束而失败,在这种情况下,存储过程应该回滚事务并返回 CREATE PROCEDURE dbo.spumb_deleteCustomer @customertodelete int AS BEGIN BEGIN TRANSACTION TRX_UMBDELCUSTOMER DELETE CREDITCARDS WHERE CUSTOMERID = @customertodelete DE

我正试图编写一个Sybase ASE 15存储过程来删除一个客户。删除操作可能由于违反外键约束而失败,在这种情况下,存储过程应该回滚事务并返回

CREATE PROCEDURE dbo.spumb_deleteCustomer @customertodelete int AS BEGIN
   BEGIN TRANSACTION TRX_UMBDELCUSTOMER

   DELETE CREDITCARDS WHERE CUSTOMERID = @customertodelete
   DELETE CUSTOMER_SELECTION_MAP WHERE CUSTOMERID = @customertodelete
   DELETE CUSTOMERS WHERE ID = @customertodelete
   SELECT @rcnt = @@ROWCOUNT
   IF (@rcnt <> 1) BEGIN
     PRINT 'FAILED TO DELETE CUSTOMER'
     ROLLBACK TRANSACTION TRX_UMBDELCUSTOMER
     RETURN
   END 
   COMMIT TRANSACTION TRX_UMBDELCUSTOMER
END
在游标中运行此SP时,执行会在第一次无效删除后中止。如何使光标继续,或者SP不引发错误


谢谢,西蒙你应该检查一下@错误=0指示错误,而不是查找@@rowcount并处理这些错误,否则调用客户端可能会返回意外消息。如果确实选中@@rowcount,则需要在每次删除后立即将其保存到变量中,因为每个命令都会重置它

如果您特别希望获取外键冲突消息,您可以检查546或547的@错误,因为当失败时,这些消息将在@错误中返回: