我有2个常规表(Table1和Table2)和一个临时表(TempTable)。我正在从Table2中的行更新Table1中的行:
List<Level> arr = mapper.readValue(data, (new ArrayList<Level>()).getClass());
我想在Table1上创建一个触发器,将所有更新的行插入TempTable。这就是我到目前为止所做的:
update t1
set t1.[Table1] = t2.[Price]
FROM
[Table1] t1
JOIN [Table2] t2 on t1.[KAT_ID] = t2.
[KAT_ID]
where t1.[Price] != t2.[Price]
我不知道如何将更新的行插入TempTable。
答案 0 :(得分:1)
将数据放在某种临时表中,而不是全局临时表,会更好。正如我在评论中所说,他们的表现非常糟糕。
首先,我们将从某种临时表开始。我不知道你的设置是什么,所以我们也会为它设置一个模式:
CREATE SCHEMA staging;
CREATE TABLE staging.[RelevantNameHere] (ID bigint IDENTITY(1,1),
KAT_ID varchar(50),
Price money);
GO
然后我们可以进入触发器:
CREATE TRIGGER [dbo].[TABLE1_TRIGGER] ON [dbo].[Table1]
AFTER UPDATE
AS
TRUNCATE TABLE staging.[RelevantNameHere];
INSERT INTO [RelevantNameHere] (KAT_ID, Price)
SELECT i.KAT_ID, i.Price
--In a trigger such as this, there are 2 additional objects you can refer to
--[inserted] and [deleted]. The names are a give away as to what they contain.
FROM inserted i;
GO
当然,这是我们在这里提供的非常有限的信息。我非常怀疑你所描述的问题实际上是你遇到的问题。您可能会更好地解释您的完整目标,并且目标在您的帖子中;那里的答案可能比上面的答案要好得多。
答案 1 :(得分:0)
我想以下是您要查找的查询。
CREATE TRIGGER [dbo].[TABLE1_TRIGGER] ON [dbo].[Table1]
AFTER UPDATE
AS
IF OBJECT_ID('tempdb..##TempTable') IS NOT NULL
DROP TABLE ##TempTable
CREATE TABLE ##TempTable(
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[KAT_ID] [varchar](50) NULL,
[Price] [money] NULL)
INSERT INTO ##TempTable (KAT_ID,Price)
SELECT KAT_ID,Price FROM [INSERTED]