我不得不说我对SQL Server触发器非常陌生,但我希望一些好的samaritan能帮助我解决这个问题。我想设置一个触发器,用于检查记录是否已添加到表中,如果是这样,则将一系列记录插入到不同的表中,从而将时间添加到受监视表中的时间戳。我已经写了我很容易理解的伪代码,这将有助于创建这些触发器。SQL Server触发器将未来记录添加到表
如果tBatch
表中有新的记录并带有特定批次ID,则将记录插入DeSchedule
。
查询到tBatch
找到新的记录,并从tBatch
提取数据:
SELECT
b.BatchID, b.fermNumber, b.BatchStartTime, b.PropStartTime, b.SiteID
FROM
[DDIApplication].[dbo].[tBatch] b
INNER JOIN
[DDIApplication].[dbo].[tBatchDetails] bd ON b.id = bd.BatchDetailID
触发
如果在tBatch
的新纪录,在DeSchedule
DeSchedule
模式
| ID | SiteID | Timestamp | BatchID | FermNumber | SampleAge | Ethanol | Glucose | SampleCompleted |
在DeSchedule
创建这些记录:
insert into DeSchedule(DATEADD(hour, 6, PropStartTime), 6666, 1, YP6, , ,)
insert into DeSchedule(DATEADD(hour, 10, PropStartTime), 6666, 1, YPD, , ,)
insert into DeSchedule(DATEADD(hour, 10, BatchStartTime), 6666, 1, 10, , ,)
insert into DeSchedule(DATEADD(hour, 20, BatchStartTime), 6666, 1, 20, , ,)
insert into DeSchedule(DATEADD(hour, 30, BatchStartTime), 6666, 1, 30, , ,)
insert into DeSchedule(DATEADD(hour, 40, BatchStartTime), 6666, 1, 40, , ,)
insert into DeSchedule(DATEADD(hour, 50, BatchStartTime), 6666, 1, 50, , ,)
insert into DeSchedule(DATEADD(hour, 65, BatchStartTime), 6666, 1, DROP, , ,)
insert into DeSchedule(DATEADD(hour, 70, BatchStartTime), 6666, 1, BW, , ,)
其他触发
当记录被输入到tBatchDetails
,对证DeSchedule
尝试和匹配(BatchID,SampleAge,SITEID)
如果找到记录更新记录并从tBatchDetails
插入(乙醇,葡萄糖和检查SampleCompleted位)表
Que RY为BatchDetailID
:。
SELECT
[BatchDetailID], [ID],
[SampleTimeStamp],
[SampleAge], [Glucose], [Ethanol]
FROM [DDIApplication] [DBO] [tBatchDetails]
tBatchDetails
模式
| ID | TimeStamp | BatchTableID | SampleAge | BatchID | Ethanol | Glucose |
编辑
而不是写出来的所有在触发器中插入是否有方法循环SampleAge选项卡并为每个SampleAge插入一条记录。
SampleAge表架构
| SiteID | SampleAge | ScheduleTime |
| 1 | YP6 | 6 |
所以不是:
insert into DeSchedule ([SiteID],[PreTimeStamp],[BatchID],[FermNumber],[SampleAge],[Ethanol],[Glucose],[SampleCompleted])
select SiteID, DATEADD(hour, 4, PropStartTime), BatchID, FirmNum, '4Hrs', NULL , NULL ,NULL
from INSERTED
它会得到的小时数从ScheduleTime和SampleAge从SampleAge表的SampleAge列DATEADD函数。然后 将遍历样本时间表,并为每个具有相同SiteID的样本插入一条记录。
这是完美的谢谢非常。我还有一个问题可以简化这个触发器。我将添加到主帖子。 @liotims – llerdal