首页 > 解决方案 > 当其他表中的日期比今天更早时更新列(完成)+在其他表中插入新行,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的新行添加新行(状态从中更改)IDdbo.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"

我怎样才能存档呢?

标签: sqlsql-serversql-server-2012

解决方案


创建触发器如下

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

推荐阅读