【问题标题】:How do I create this stored procedure?如何创建此存储过程?
【发布时间】:2012-05-19 20:53:03
【问题描述】:

我有两张桌子:

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")

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

成功完成后如何进行一步,然后进入第二步?

【问题讨论】:

  • 是的。我添加了一个定义表。

标签: sql-server stored-procedures transactions


【解决方案1】:

这是一个简单的示例,可以帮助您入门。

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 

【讨论】:

  • 成功插入后如何保护日志表中的记录?
  • 不确定您的意思。正在寻找消息或日志插入的错误处理?
  • 非常感谢!最后一个问题。如何执行以下操作:在表中插入一行 (NEWS),然后将 id save 插入表日志中:INSERT INTO LOG (ACTION) VALUES ('NEWS ID 1');
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多