8

SQL Server 2008 R2 で ObservationId、FirstCreatedDate、description、... ...、LastUpdatedDate の列を持つテーブルを作成しました。ObservationIdは、1 ずつ増加する ID です。

INSERT 用と UPDATE 用の 2 つのトリガーを作成する必要があります。新しいレコードが挿入されると、INSERT トリガーは現在の日時を取得して FirstCreatedDate 列を更新します。既存のレコードが更新されている間、UPDATE トリガーは現在の日時を取得して LastUpdatedDate 列を更新します。

識別が問題である可能性があると推測しているため、これを行うことに失敗しました。

誰か手を貸してくれませんか?ありがとう!

乾杯、アレックス

ALTER TRIGGER [dbo].[T_InsertNewObservation] ON [dbo].[GCUR_OBSERVATION] 
  AFTER INSERT
AS 
BEGIN
  -- SET NOCOUNT ON added to prevent extra result sets from
  -- interfering with SELECT statements.
  SET NOCOUNT ON;

  -- Insert statements for trigger here
  UPDATE GCUR_OBSERVATION SET GCUR_OBSERVATION.FirstCreatedDate = getdate()
  FROM GCUR_OBSERVATION a INNER JOIN INSERTED ins ON a.ObservationId = ins.ObservationId

END
4

3 に答える 3

12

あなたはほとんど正しいと思いますが、INSERTED または DELETED テーブルに正しくアクセスしていません。

ALTER TRIGGER [dbo].[T_InsertNewObservation] ON [dbo].[GCUR_OBSERVATION] 
  AFTER INSERT
AS 
BEGIN
  -- SET NOCOUNT ON added to prevent extra result sets from
  -- interfering with SELECT statements.
  SET NOCOUNT ON;

  -- get the last id value of the record inserted or updated
  DECLARE @id INT
  SELECT @id = [ObservationId]
  FROM INSERTED

  -- Insert statements for trigger here
  UPDATE GCUR_OBSERVATION 
  SET GCUR_OBSERVATION.FirstCreatedDate = GETDATE()
  WHERE [ObservationId] = @id 

END

PS。メモ帳に書いてテストしていないので、これが機能することを願っています。

于 2012-06-21T04:42:27.950 に答える
1

以下のコードは、AFTER UPDATE が最後に変更された日付列を変更するためのものです。

何か問題がありましたらアドバイスをお願いします。ありがとう!

ALTER TRIGGER [dbo].[T_UpdateObservation] ON [dbo].[GCUR_OBSERVATION] 
AFTER UPDATE
AS 
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- get the last id value of the record inserted or updated
DECLARE @id INT
SELECT @id = [ObservationId]
FROM DELETED

-- Insert statements for trigger here
UPDATE GCUR_OBSERVATION
SET GCUR_OBSERVATION.LastUpdatedDate = getdate()
WHERE [ObservationId] = @id

END
于 2012-06-21T05:15:36.663 に答える