当前位置: 首页 > 知识库问答 >
问题:

上次插入值的触发器

邢乐
2023-03-14

谁能帮我创建一个触发器,将Sensordata表中的最后一条记录附加到lastssensordata中。我只希望每个ConnectionDeviceId有1个值,并且该值必须是最后插入的值。(它将用于在仪表中显示)。我将在下链接我的sql脚本。

CREATE TABLE Revpi (
revpiName varchar(100) NOT NULL,
revpiDateTimeCreated datetime NOT NULL,
revpiLocation varchar(150) NOT NULL,
CONSTRAINT PK_revpiNavn PRIMARY KEY (revpiName)
);

CREATE TABLE Sensor (
sensorName varchar(100) NOT NULL,
revpiName varchar(100) NOT NULL,
sensorDateTimeCreated datetime NOT NULL,
CONSTRAINT PK_sensorNavn PRIMARY KEY (sensorName),
CONSTRAINT FK_revpiName FOREIGN KEY (revpiName) REFERENCES Revpi (revpiName)
);

CREATE TABLE Sensordata (
SensordataID int NOT NULL AUTO_INCREMENT,
data varchar (500),
ConnectionDeviceId varchar(500) NOT NULL,
EventProcessedUtcTime varchar(50) NOT NULL,
CONSTRAINT PK_sensorDataNavn PRIMARY KEY (SensordataID),
CONSTRAINT FK_sensorNavn FOREIGN KEY (ConnectionDeviceId) REFERENCES Sensor (sensorName)
);

CREATE TABLE Lastsensordata (
lastSensorNavn varchar(255) NOT NULL,
lastData varchar (500) NOT NULL,
LastTime varchar(50) NOT NULL,
CONSTRAINT PK_Lastsensordata PRIMARY KEY (lastSensorNavn),
CONSTRAINT FK_LastensordataSensordata FOREIGN KEY (lastSensorNavn) REFERENCES Sensordata (ConnectionDeviceId)
);

共有1个答案

阎唯
2023-03-14

您可以使用以下触发器执行此操作:

CREATE TRIGGER after_insert_sensordata 
AFTER INSERT ON Sensordata
FOR EACH ROW 
REPLACE INTO Lastsensordata VALUES (NEW.ConnectionDeviceId, NEW.`data`, NEW.EventProcessedUtcTime);

您需要使lastSensorNavn字段唯一。您还应该修复lastsensornavn和connectiondeviceid之间的varchar大小差异。固定表的外观如下所示:

CREATE TABLE Lastsensordata (
lastSensorNavn varchar(500) UNIQUE NOT NULL,
lastData varchar (500) NOT NULL,
LastTime varchar(50) NOT NULL,
CONSTRAINT PK_Lastsensordata PRIMARY KEY (lastSensorNavn),
CONSTRAINT FK_LastensordataSensordata FOREIGN KEY (lastSensorNavn) REFERENCES Sensordata (ConnectionDeviceId)
);
 类似资料:
  • 我的存储库实现遇到了一个奇怪的问题。每次调用应该从数据库获取数据并通过网络调用更新数据库的函数时,我都会从数据库观察器收到多个结果。 基本上,如果我调用一次GetApplianceControl,就会得到所需的结果。然后我再次调用另一个序列号,它是空的,我得到了空数组。但是,我第三次调用,但是使用与第一次相同的序列号,在进行insert调用后,我得到了正确结果和空数组的混合。 像这样: 第一次呼叫

  • 在“name=new.user_name”后面发现意外的标记“end-of-statement”。预期的令牌可能包括:“”..sqlcode=-104,sqlstate=42601,driver=4.9.78 SQL code:-104,SQL state:42601

  • 也许有人能帮我澄清一下。 我正在尝试编写一个插入前触发器,如果它留空,可以设置关闭。这可能吗? 没有太多代码可显示。我所做的只是创建了一个带有调试语句的简单的插入前触发器,以确保我的触发器在验证规则之前执行。似乎验证规则是第一位的(我显然无法更改它)。触发器永远不会触发。 这是可行的还是不可能的?

  • null 计划:当用户购买一张票时,我将一条记录插入到适当的表中。例如,如果用户购买: Ticket#1,我将一条记录插入Table1 Ticket#2,我将一条记录插入Table1和Table2 Ticket#3,我将一条记录插入Table1和Table3 问题:如何接收不是类型为1的票证的所有数据,然后拆分参数插入到单独的表中。例如,当我试图为Table2创建触发器时,该触发器只能接收与Tab

  • 问题内容: 我有两个桌子和。我需要一些行插入从,它被插入之后。我知道这个问题,但我无法解决。请帮忙。 我为触发器编写了以下代码: 现在,当我插入行时,将添加到,但不添加到。它引发以下错误: _消息515,级别16,状态2,过程trigger_UpdateItemDetails,行11 无法将值NULL插入表’dbStockHandling.dbo.tbl_ItemDetails’的列’Purcha

  • 问题内容: 我要在tableA上写一个插入触发器。它将使用相同的表但不同的列执行更新。执行此操作时出现错误。我的触发器是 我有一个应用程序将单独执行col2并将col1保持为空。因此,一旦插入行,我的触发器将为col1提供值。但是插入行时出现错误消息,提示“触发器失败且无效”。这该怎么做。TIA。 问题答案: 如果要分配一个简单的默认值,最简单的方法是使用DEFAULT子句在表上声明它。 这适用于