gpt4 book ai didi

sql - 使用try/catch进行更新

转载 作者:行者123 更新时间:2023-12-04 14:05:25 24 4
gpt4 key购买 nike

因为我是新手,所以我试图注销我编写的存储过程可能发生的任何错误。我了解SQL 2005中的“尝试/捕获”以及error_procedure(),ERROR_MESSAGE()和其他内置函数。我不知道该怎么做是捕获导致更新错误的记录。

我可能可以使用游标遍历并一次更新一行。然后在循环中设置一个值并报告该值。但这似乎违反了使用SQL的目的。

对于在哪里研究此问题的任何想法或指针,我们深表感谢。我不完全了解RowNumber()可以以某种方式使用吗?有点在这里抓稻草。

欢呼和感谢

鲍勃

我正在使用SQL 2005。

编辑

我真的不想在大多数情况下使用事务,因为它仅用于报告目的。因此,我正在做的一个例子是:

/******************************************************************************
Now get update the table with the current worker. That depends on the
current status of the loan.
******************************************************************************/

UPDATE #table SET currWorker = tblUser.UserLogonName
FROM tblUser
JOIN tblLoanInvolvement ON tblLoanInvolvement.invlUnderwriterDeptID = tblUser.userID
WHERE tblLoanInvolvement.LOANid = #table.loanid
AND #table.currstatus in('R_UW_Approved','R_Submitted to Underwriting')


UPDATE #table SET currWorker = tblUser.UserLogonName
FROM tblUser
JOIN tblLoanInvolvement ON tblLoanInvolvement.invlProcessorID = tblUser.userID
WHERE tblLoanInvolvement.LOANid = #table.loanid
AND #table.currstatus in('R_UW Approved With Conditions','R_Loan Resubmitted','R_UW_Suspended','R_Submitted to Processing')

UPDATE #table SET currWorker = tblUser.UserLogonName
FROM tblUser
JOIN tblLoanInvolvement ON tblLoanInvolvement.invlCloserID = tblUser.userID
WHERE tblLoanInvolvement.LOANid = #table.loanid
AND #table.currstatus in('R_Docs Out','R_Ready to Close','R_Scheduled to Close and Fund','Scheduled To Close')


因此,如果一行更新不正确,我不想丢掉整个东西。但是,知道导致该问题的#table.loanid的值将非常方便。

谢谢你的时间。

最佳答案

像这样的try / catch块...

BEGIN TRY
-- Your Code Goes Here --
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage
END CATCH


...将帮助您在SQL代码中找到问题。如果这是在存储过程中,则还可以返回参数(即,将SELECT @RecordID AS [RecordID]添加到catch块中的该列表)。但是,如果您在实际数据方面遇到问题,我建议您考虑添加外键和其他约束来保护数据库的逻辑完整性。理想情况下,您至少不能将数据放入数据库中,这会破坏存储过程。

编辑

指的是您最近的编辑,如果将UPDATE放在存储过程中并捕获错误,然后用对该过程的调用替换更新系列,其余更新将继续,您可以在其中返回/跟踪/记录错误SP的捕获块,但是您希望这样做。

关于sql - 使用try/catch进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/357203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com