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

第1步

  • 如果NewsIdNULL:我想将该行保存到表中 ( NEWS)。
  • 如果newsid已定义,那么我想更新该行。

第2步

  • 我想做第 1 步,然后将记录保存到名为LOG.
  • INSERT INTO LOG ("Action") VALUES ("insert or update")

如何使用存储过程完成这两个步骤?

成功完成后如何进行一步并转到第二步?

4

1 回答 1

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

来自代码项目

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 
于 2012-05-19T07:33:28.533 回答