0

こんにちは、次のような SQL テーブルがあります。

ID      BEZEICHNUNG  PREIS        UPDATE_DATE          FLAG

1       Drake        Room         14.06.2012 16:00     0
2       Blazer       BS           12.05.2012 14:45     0

値を変更するときに、新しい ID で行をコピーし、フラグを 1 に変更すると、次のようになります。

ID      BEZEICHNUNG  PREIS        UPDATE_DATE          FLAG

1       Drake        Room         11.07.2012 09:40     1
2       Blazer       BS           12.05.2012 14:45     0
3       Dune         Room         11.07.2012 09:40     0

行を変更すると、update_date 自体が更新され、フラグが 1 に設定されます。このような SQL ステートメントを作成するにはどうすればよいですか。

現在のトリガーは次のようになります。

ALTER TRIGGER [dbo].[UPDT_DIENSTLEISTUNG]
   ON [dbo].[DIENSTLEISTUNG]
   AFTER INSERT, UPDATE
AS
BEGIN

   SET  NOCOUNT ON;

   UPDATE DIENSTLEISTUNG
      SET UPDATE_DATE    = getdate ()
    WHERE id IN (SELECT id
                   FROM inserted);


END;

よろしくお願いいたします。

4

2 に答える 2

2

最初にこのトリガーを作成してから、テーブルを更新してみてください

CREATE TRIGGER [dbo].[UPDT_DIENSTLEISTUNG]
   ON [dbo].[DIENSTLEISTUNG]
   AFTER  UPDATE
AS

BEGIN
 SET  NOCOUNT ON;

DECLARE @MAX_ID INT;
SELECT @MAX_ID=MAX(ID) FROM DIENSTLEISTUNG;

declare @tmp Table(ID  int,     BEZEICHNUNG varchar(20), PREIS varchar(20),
     UPDATE_DATE datetime,      FLAG bit)

insert into @tmp
select ID,BEZEICHNUNG,PREIS,UPDATE_DATE,1 [flag] from deleted;

delete T from DIENSTLEISTUNG T JOIN @tmp I
ON T.ID=I.ID

INSERT INTO DIENSTLEISTUNG
SELECT @MAX_ID+ROW_NUMBER() OVER(ORDER BY ID) [ID],BEZEICHNUNG,PREIS,GETDATE(),0 
FROM INSERTED

INSERT INTO DIENSTLEISTUNG
select * from @tmp


 SET  NOCOUNT OFF;
END;
于 2012-07-11T09:05:33.163 に答える
-1

これを行う 1 つのオプション (元の行は更新されますが、履歴行が挿入されます) は、次のような SQL を使用することです。

create table MyTab
(
    [id] int primary key identity,
    [name] varchar(50),
    [type] varchar(50),
    [flag] bit default 0
)

insert into MyTab([name], [type])
    Values('Drake', 'Room')
insert into MyTab([name], [type])
    Values('Blazer', 'BS')

select * from myTab

Update MyTab
    Set name = name + 'new'
Output deleted.name, deleted.type, 1
into myTab(name, type, flag)
Where name = 'Drake'

select * from myTab
于 2012-07-11T07:49:06.857 に答える