sql - 当其他表中的日期比今天更早时更新列(完成)+在其他表中插入新行,ID来自第一个表
问题描述
dbo.Auftrag
如果子表中的所有相关列dbo.Positionen
都已使用此 SQL 过时,我会更新表:
UPDATE dbo.Auftrag
SET Status = 5
WHERE NOT EXISTS (SELECT *
FROM dbo.Positionen
WHERE dbo.Positionen.FremdID = dbo.Auftrag.ID
AND dbo.Positionen.Lieferdatum >= convert(date, getdate()))
现在我想在同样的情况下,如果Status
设置为表中的值,则将使用1
表中dbo.Eventlog
的新行添加新行(状态从中更改)ID
dbo.Auftrag
我将在以下内容中插入类似的内容dbo.Eventlog
:
ID ID_Auftrag Referenz Benutzer [Datum und Uhrzeit] Ereignis
PK(AI) dbo.Auftrag.ID dbo.Auftrag.Ref "BW" CURRENT_TIMESTAMP "Set Status"
我怎样才能存档呢?
解决方案
创建触发器如下
CREATE TRIGGER AfterupdateAuftrag
ON dbo.Auftrag
AFTER UPDATE
AS
DECLARE @ID AS INT
DECLARE @STATUS AS INT
DECLARE @Referenz as nvarchar(50)
SELECT @ID=ID,@STATUS=status,@Referenz=Ref FROM inserted
if @status=5 and convert(time, GETDATE(), 108) between cast('00:00:00' as time) and cast('00:05:00' as time)
INSERT INTO dbo.Eventlog(ID_Auftrag,Referenz,Benutzer,[Datum und Uhrzeit],Ereignis) VALUES (
@id,@Referenz,'BW',getdate(),'Set Status')
GO
推荐阅读
- generics - 将记录数据类型推入堆栈
- mysql - 如何获取 MySQL 在新行插入期间更新索引所花费时间的统计信息
- java - java中构建器类的正确命名
- git - 完全撤消提交并推送到远程
- android - MVVM 中的 Activity 到 Activity 通信
- mongodb - 在聚合管道期间对列表索引进行平均?
- c - 如何允许子进程创建嵌套的用户命名空间?
- ios - Swift - 多个 TableView 复选标记 - 保存和加载选择
- opencv - 输入图像类型上的 opencv 错误应为 CV_8UC3 或 CV_8UC4
- java - Firebase 数据不断循环