2

私は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

  • NewsIdである場合NULL: 行をテーブル ( ) に保存しますNEWS
  • が定義されている場合newsid、行を更新します。

ステップ2

  • ステップ 1 を実行してから、レコードを という名前のテーブルに保存しますLOG
  • INSERT INTO LOG ("Action") VALUES ("insert or update")

ストアド プロシージャを使用してこれらの 2 つの手順を実行するにはどうすればよいですか?

正常に完了した後、ステップ 2 に進むにはどうすればよいですか?

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

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