【发布时间】:2019-06-21 19:48:27
【问题描述】:
我正在查看是否能够在此存储过程中正确捕获我的错误:
ALTER PROCEDURE [dbo].[sp_UpdateText]
(@aID AS INT,
@CompanyID AS INT,
@CompanyName AS VARCHAR(MAX))
AS
BEGIN
DECLARE @Result VARCHAR(MAX)
BEGIN TRY
SET @Result = (SELECT dbo.[udf_StripHTMLTags](@CompanyName)) -- UDF function that strips HTML tags off my text field
BEGIN TRANSACTION
UPDATE __TestTable1
SET CompanyName = @Result
WHERE aid = @aid AND CompanyID = @CompanyID
COMMIT TRANSACTION
END TRY
BEGIN CATCH
DECLARE @ErrorNumber INT = ERROR_NUMBER();
DECLARE @ErrorLine INT = ERROR_LINE();
PRINT 'ERROR NUMBER: ' + CAST(@ErrorNumber as Varchar(10));
PRINT 'ERROR LINE: ' + CAST (@ErrorLine as Varchar(10));
END CATCH
END
Go
我基本上希望这些 BEGIN TRY BEGIN CATCH 错误捕获方法能够成功捕获错误,如果出现?有什么想法吗?
【问题讨论】:
-
我会在你的 Catch 中添加一个回滚事务
-
附注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀! -
@marc_s - 谢谢你,Marc - 除了这样做,去安全吗? :)
标签: sql-server error-handling ssms-2012