Stored procedures Sybase ASE SP可优雅地处理外键约束冲突
我正试图编写一个Sybase ASE 15存储过程来删除一个客户。删除操作可能由于违反外键约束而失败,在这种情况下,存储过程应该回滚事务并返回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
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的@错误,因为当失败时,这些消息将在@错误中返回: