1

Update トリガーのプログラミングに問題があります。編集した行を新しいデータと新しい ID で新しい行にコピーするトリガーを作成したいと考えています。古い行は、フラグが 0 から 1 に変わるだけで同じである必要があります。

テーブルは次のようになります。

ID      Artikelname  PREIS        UPDATE_DATE          FLAG
1       Tomatoe      3            14.06.2012 16:00     0
2       Apple        1,5          12.05.2012 14:45     0

最初の行の価格を変更すると、テーブルは次のようになります。

ID      Artikelname  PREIS        UPDATE_DATE          FLAG
1       Tomatoe      3            14.06.2012 16:00     1
2       Apple        1,5          12.05.2012 14:45     0
1       Tomatoe      2            13.07.2012 10:45     0

これまでの私のトリガーは次のとおりです。

USE [TestDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[Produkt_Update]
ON [dbo].[Produkt]
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON
    DECLARE @ID int
    DECLARE @Artikelname nvarchar(50)
    DECLARE @Preis numeric
    DECLARE @Flag numeric
    DECLARE @max_id int

    SET @ID = (SELECT ID FROM inserted)
    SET @Artikelname = (SELECT Artikelname FROM inserted)
    SET @Preis = (SELECT Preis FROM inserted)
    SET @Flag = (SELECT Flag FROM inserted)
    SET @max_id = (SELECT MAX(ID) from dbo.Produkt)


    SET IDENTITY_INSERT dbo.Produkt ON
    INSERT INTO dbo.Produkt
    (ID,Artikelname,Preis)
    values (@max_id+1,@Artikelname,@Preis)
    SET IDENTITY_INSERT dbo.Produkt OFF

    UPDATE dbo.Produkt
    SET Flag = 1
    WHERE ID=@ID
END

トリガーを使用して新しい行を作成できますが、最初の行の敷居の価格が変わります。これを処理する方法がわかりません。私を手伝ってくれますか?

4

3 に答える 3

4

これを試して、私に知らせてください

CREATE TRIGGER [dbo].[Produkt_Update]
   ON [dbo].[Produkt]
   AFTER  UPDATE
AS
BEGIN
 SET  NOCOUNT ON;

    DECLARE @MAX_ID INT;
    SELECT @MAX_ID=MAX(ID) FROM [Produkt];

    declare @tmp Table(ID  int,     Artikelname  varchar(200),
    PREIS varchar(200),UPDATE_DATE datetime,      FLAG bit)

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

    delete T from [Produkt] T JOIN @tmp I
    ON T.ID=I.ID

SET IDENTITY_INSERT   [Produkt] ON
INSERT INTO [Produkt] (ID,Artikelname,PREIS,UPDATE_DATE,FLAG)
SELECT @MAX_ID+ROW_NUMBER() OVER(ORDER BY ID) [ID],Artikelname,PREIS,GETDATE(),0 
FROM INSERTED
union all
select * from @tmp

 SET IDENTITY_INSERT dbo.Produkt OFF
 SET  NOCOUNT OFF;
END;
于 2012-07-13T09:08:26.780 に答える
0

挿入されたテーブルではなく、削除されたテーブルから価格(preis)を挿入する必要があります

于 2012-07-13T09:13:05.927 に答える
-1

交換

 SET @ID = (SELECT ID FROM inserted) 

SET @ID = (SELECT ID FROM deleted) 
于 2012-07-13T08:58:28.837 に答える