1

いくつかのフィールドがあるテーブルPurchaseformsがあります。このテーブルにPurchaseIdは、IDと。の2つのフィールドがありPurchaseNumberますnvarchar

Purchaseformテーブルに行を挿入すると、が返されます@@IDENTITY。挿入後すぐにPurchaseNumberフィールドを更新したい。

例えば

PurchaseIdが1000の場合、PurchaseNumberに更新する必要がありますP1000。どうすればいいですか?

4

2 に答える 2

0

挿入トリガーを使用して、あるフィールドを別のフィールドに基づいて更新できます。

PurchaseNumber行が挿入されたときに値が指定された場合でも、次のコードは常に を上書きすることに注意してください。の値がすでにあるスキップ行WHEREに句を追加できます。UPDATEPurchaseNumber

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は、セット操作の結果を表すことができるテーブルです。常に正確に 1 つの行が含まれることを想定してトリガーを設計することは、通常、不適切な計画です。複数の行が存在しないことが絶対に確実である場合は、行数のチェックを追加しRaIsError、容認できないステートメントを実行しようとしたことを後で来る人に明示的に通知するために使用してください. ( if ( select Count(*) from inserted ) > 1 RaIsError( 'FooTable_Insert: No more than one row may be processed.', 25, 42 ) with log)

于 2012-12-16T14:46:21.423 に答える
0

より良い計算列を使用できます

CREATE TABLE Purchaseforms
 (
  PurchaseId int IDENTITY,
  PurchaseNumber AS 'P' + CAST(PurchaseId AS nvarchar(10)),
  ... 
  other columns
  )
于 2012-12-16T17:40:36.053 に答える