如何在sql中插入后更新字段

时间:2012-12-16 03:45:52

标签: sql-server-2008

我有一个表Purchaseforms,其中包含一些字段。此表格包含两个字段PurchaseId,这是一个标识,PurchaseNumbernvarchar

在Purchaseform表中插入一行后,返回@@IDENTITY。我想在立即插入后更新PurchaseNumber字段。

E.g。

如果PurchaseId为1000,则PurchaseNumber应更新为P1000。我该怎么办?

2 个答案:

答案 0 :(得分:0)

插入触发器可用于根据另一个字段更新一个字段。

请注意,即使在插入行时提供了值,以下代码也将始终覆盖PurchaseNumber。可以将WHERE子句添加到已经具有UPDATE值的PurchaseNumber跳过行。

create trigger PurchaseForms_Insert on PurchaseForms after Insert as
  begin
  set nocount on

  update PF
    set PurchaseNumber = N'P' + cast( i.PurchaseId as NVarChar(10) )
    from PurchaseForms as PF inner join
      inserted as i on i.PurchaseId = PF.PurchaseId
  end

除了触发器:inserteddeleted是表,以便它们可以表示集合操作的结果。假设它们总是只包含一行来设计触发器通常是一个糟糕的计划。如果您绝对肯定永远不会有多行,那么请添加一行检查行数并使用RaIsError明确告知那些后来出现他们试图执行不可接受的语句的人。 (if ( select Count(*) from inserted ) > 1 RaIsError( 'FooTable_Insert: No more than one row may be processed.', 25, 42 ) with log

答案 1 :(得分:0)

可以使用更好的计算列

CREATE TABLE Purchaseforms
 (
  PurchaseId int IDENTITY,
  PurchaseNumber AS 'P' + CAST(PurchaseId AS nvarchar(10)),
  ... 
  other columns
  )