2012-05-19 125 views
2

我有兩個表:如何創建此存儲過程?

CREATE TABLE [NEWS] 
(
    [ID]  INT IDENTITY(1,1) NOT NULL, 
    [TITLE] VARCHAR(500) NULL, 
    [CONTENT] VARCHAR(800) NULL, 
    [CREATED] DATETIME DEFAULT(GETDATE()) 

    PRIMARY KEY ([ID]) 
) 

CREATE TABLE [LOG] 
(
    [ID]  INT IDENTITY(1,1) NOT NULL, 
    [ACTION] VARCHAR(500) NULL, 
    [CREATED] DATETIME DEFAULT(GETDATE()) 

    PRIMARY KEY ([ID]) 
) 

我想要做下列程序:

我有一個輸入參數@NewsId

STEP 1

  • 如果NewsIdNULL:我想該行保存到表(NEWS)。
  • 如果newsid已定義,那麼我想更新該行。

STEP 2

  • 我想要做的步驟1中,然後將記錄保存到一個名爲LOG表。
  • INSERT INTO LOG ("Action") VALUES ("insert or update")

我能如何使用存儲過程,這兩個步驟?

如何在成功完成後再進入第2步?

+0

是。我添加了一個定義表。 – JohnMalcom

回答

2

這是一個簡單的例子,讓你去。

create procedure MyProc (@NewsId int) as 
Begin 

    -- you should really pass these in? 
    declare @title varchar(500) = 'A title' 
    declare @content varchar(800) = 'A piece of content' 


    if @NewsId is null 
    begin 

    Begin Try 
     insert into News (Title, Content) values (@title, @content) 

     -- get the new id just inserted 
     set @NewsId = SCOPE_IDENTITY() 

     insert into Log (Action) values ('insert') 
    End Try 

    Begin Catch 
     .... handle error 
    end catch 

    end 
    else 
    begin 
     update News set Title = @title, Content = @content 
     where id = @NewsId 
     insert into Log (Action) values ('update') 

    end 

end 

CodeProject

Begin Try 
The_Query_for_which_we_need_to_do_the_ Error_Handling 
End Try 
Begin Catch 

    If there is some error in the query within the Try block, this flow 
    will be passed to this Catch block. 

End catch 
+0

成功插入插入記錄到日誌表後,如何保護該插入? – JohnMalcom

+0

不確定你的意思。正在尋找新聞插件或日誌的錯誤處理? –

+0

是的,用於錯誤處理。我如何發現錯誤? – JohnMalcom