2015-08-27 44 views
1

我有兩個表和一個簡單的存儲過程。我想使用存儲過程插入到table1中,其中一個參數是主鍵。存儲過程 - 將錯誤寫入另一個表

這裏是我有麻煩:

我想擁有它,這樣如果PARM /主鍵的用戶已經進入到存儲過程和運行已經在桌子上,然後在它寫出的字段到第二個表格以及錯誤描述。

如何捕獲/輸出此錯誤信息?

存儲過程(沒有錯誤日誌):

CREATE PROCEDURE procedure1 
    @Primary      INT, 
    @Info     NVARCHAR     
AS 
BEGIN 
SET NOCOUNT ON 

INSERT INTO Table1 
     ( 
     Primary     , 
     Info     
    ) 
VALUES 
     ( 
     @Primary     , 
     @Info     
    ) 

END 

感謝

回答

1
CREATE PROCEDURE dbo.InsertSomething 
(
    @PrimaryKey INT 
    , @Info NVARCHAR(MAX) 
) 
AS 
BEGIN 
    IF EXISTS (SELECT 1 FROM dbo.Table1 WHERE ID = @PrimaryKey) 
    BEGIN 
     INSERT INTO dbo.Table2 (ID, Info) 
     VALUES (@PrimaryKey, @Info); 

     RAISERROR (15600,-1,-1, 'Your custom message'); 
    END 
    ELSE 
    BEGIN 
     INSERT INTO dbo.Table1 (ID, Info) 
     VALUES (@PrimaryKey, @Info); 
    END 
END 

所有你需要做的是一個簡單的檢查,如果記錄在第一表中已經存在,如果它只是插入它並拋出錯誤。

+0

如何將錯誤信息轉移到table2上的字段? – HolyUnicow

+0

你生成自己的消息。你不是嗎?這是一個簡單的插入。如果不是,請查看'ERROR_MESSAGE()' –

+0

請注意,如果沒有明確的['TRANSACTION'](https://msdn.microsoft.com/en-us/library/ms188929.aspx),行可能不會在'EXISTS'測試中不存在,但在'INSERT'之前被其他用戶插入。如果預計需要插入大多數值,並且SQL Server的版本支持它,請使用['TRY' /'CATCH'](https://msdn.microsoft.com/zh-cn/library/ms175976。 aspx?f = 255&MSPPError = -2147217396)將更有效,並且不需要顯式事務。 – HABO

相關問題