SQL Server trigger if update() with condition



我在SQL Server中有一个表,有3列:ID,NAME,VALUE

这个表有2行ID=1ID=2

(ID的值不变)。

每隔一段时间VALUE列的值都会发生变化。每次列VALUE发生变化时,我都想将这个更新后的值插入到表中(Device1 for ID=1, Device1 for ID=2)。

我创建了一个更新触发器,就像update(VALUE) begin…但是它不起作用。

是否有一种方法可以在if update(VALUE)中添加条件以在每一行

中工作我使用了这个查询

Create Trigger insertIntoDevices
On ITEMS
For Update
As
If Update(VALUE)
Begin
Insert Into table device1 
Where ID = 1
Insert Into table device2
Where ID = 2
End

对于这个查询,列VALUE的每次更新都会在device1和device1中插入VALUE,并且会重复我的表device1和device2中的值。

在下面创建表;

CREATE TABLE TestTable(
ID      INT IDENTITY(1,1),
Name    VARCHAR(5),
VALUE   NVARCHAR(50)
)

GO
CREATE TABLE device1(
VALUE NVARCHAR(50)
)
GO
CREATE TABLE device2(
VALUE NVARCHAR(50)
)
GO

插入ID=1和ID=2

GO
INSERT INTO TestTable(Name,Value)
VALUES('Test1','test1'),('TEST2','test2')

首先,要找到每一行的新值,您可以使用'insert ',但它可以包括未更改的数据。例如:ID =1,Name='test1'和VALUE='test1',并且Name列的更新也将包含在插入中。

其次,要查找每一行的旧值,您可以使用'deleted'。

之后,我们找到了只包含VALUE更新的值。

To Sump Up,查找插入行和删除行将为我们提供每一行的新值和旧值的结果。我们使用交集(INNER JOIN)来查找更改的值。

CREATE TRIGGER [dbo].[insertIntoDevices]
ON [dbo].[TestTable]
AFTER UPDATE
AS 
BEGIN
DECLARE @InsertedTable table (
InsertedID      INT,
InsertedName    VARCHAR(5),
InsertedVALUE   NVARCHAR(50)
)
DECLARE @DeletedTable table (
DeletedID       INT,
DeletedName     VARCHAR(5),
DeletedVALUE    NVARCHAR(50)
)

INSERT INTO @InsertedTable(InsertedID,InsertedName,InsertedVALUE)
SELECT ID,[Name],[Value] FROM inserted;  
INSERT INTO @DeletedTable(DeletedID,DeletedName,DeletedVALUE)
SELECT ID,Name,Value FROM deleted;

INSERT INTO device1(VALUE)
SELECT  UpdatedValue    = it.InsertedVALUE
FROM @InsertedTable as it
INNER JOIN @DeletedTable as dt ON it.InsertedID = dt.DeletedID AND ISNULL(dt.DeletedVALUE,'') <> ISNULL(it.InsertedVALUE,'')
WHERE it.InsertedID = 1

INSERT INTO device2(VALUE)
SELECT  UpdatedValue    = it.InsertedVALUE
FROM @InsertedTable as it
INNER JOIN @DeletedTable as dt ON it.InsertedID = dt.DeletedID AND ISNULL(dt.DeletedVALUE,'') <> ISNULL(it.InsertedVALUE,'')
WHERE it.InsertedID = 2
END
为了测试,我在下面使用了更新查询;
--Example 1
UPDATE TestTable
SET Value='selam'
WHERE ID = 1

--Example 2
UPDATE TestTable
SET Value='hi'
WHERE ID = 2

相关内容

  • 没有找到相关文章

最新更新