[英]How to return an error in a stored procedure and insert into a table
我對SQL Server不太了解,但是本質上我這里是一個存儲過程,應該將參數(id(主鍵)和Test數據)插入測試表dbo.test中
如果添加失敗,則應使用ID,測試數據和錯誤信息將其添加到dbo.Error_Log。
我的存儲過程如下所示:
@Id int = 0,
@Test_column nvarchar(10) = 0
AS
BEGIN
SET NOCOUNT ON;
IF @@ERROR <> 0
BEGIN
INSERT INTO AdventureWorks2012.dbo.Error_Log ([Id], [Data], [Error_description])
SELECT @Id,
@Test_column,
@@ERROR
END
ELSE
INSERT INTO AdventureWorks2012.dbo.Test ([Id], [Test_column])
SELECT @Id,
@Test_column
END
我正在像這樣執行它:
USE [AdventureWorks2012]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[uspTester]
@Id = 1,
@Test_column = N'data123'
SELECT 'Return Value' = @return_value
GO
SELECT * FROM AdventureWorks2012.dbo.Test
SELECT * FROM AdventureWorks2012.dbo.Error_Log
由於某種原因,它將返回填充的dbo.Test,空的dbo.Error_Log和返回值-4
錯誤是:
消息2627,級別14,狀態1,過程uspTester,行21違反主鍵約束'PK__Test__3214EC0775996C4D'。 無法在對象“ dbo.Test”中插入重復密鑰。 重復鍵值為(1)。 該語句已終止。
我需要將該錯誤輸出到dbo.Error_Log中,而不僅僅是完全停止操作。
@@ ERROR變量“返回最后執行的Transact-SQL語句的錯誤號”,即,嘗試插入后需要檢查@@ ERROR。 像這樣:
BEGIN
SET NOCOUNT ON;
INSERT INTO AdventureWorks2012.dbo.Test ([Id], [Test_column])
SELECT @Id,
@Test_column
IF @@ERROR <> 0
BEGIN
INSERT INTO AdventureWorks2012.dbo.Error_Log ([Id], [Data], [Error_description])
SELECT @Id,
@Test_column,
@@ERROR
END
END
注意:如果您想要錯誤消息而不是數字,則可以使用ERROR_MESSAGE()函數: http : //msdn.microsoft.com/zh-cn/library/ms190358.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.