我的桌子出了问题,我无法解决这个问题。我的表看起来像这样:
是的,我知道它不是英语,但不应该是一个问题。
我有另一张表如下:
表2 - Skema
我的表1中有一个触发器,它将数据插入表2
CREATE TRIGGER [Skema_Opdatering]
ON [dbo].[Skilt]
FOR INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
UPDATE Skema SET Skema.Emne = Skilt.Arbejdsopgave
FROM Skilt
WHERE CONVERT(varchar(25),Skema.Tid,108)
BETWEEN
dateadd(minute,((DATEDIFF(minute, cast(0 as DateTime), skilt.Tid_startet) + 7)/ 15) * 15, cast(0 as DateTime))
AND
dateadd(minute,((DATEDIFF(minute, cast(0 as DateTime), skilt.Tid_sluttet) + 7)/ 15) * 15, cast(0 as DateTime))
AND
CONVERT(varchar(25),Skema.Tid,105) = CONVERT(varchar(25),Skilt.Dato,105)
;
END
但我的问题是,如果我插入/更新超过1次,它不会从表2中删除旧值,我最终会得到一个应为NULL但有一个值的行。所以我的问题是如何在另一次更新/插入之前将表重置为NULL,以便我的触发器可以插入新值?
答案 0 :(得分:0)
尝试从Table2导入数据并将列更改为行,然后在第三个(Junction表)中插入记录,稍后您可以再次修改它。这样您将有更多的抓地力,错误的可能性将是较小的一个。
答案 1 :(得分:0)
DATEADD
将返回SMALLDATETIME
,Skema.Tid
列为TIME
类型。我认为你应该CONVERT
或CAST
SMALLDATETIME
到TIME
这样的事情:
-- CONVERT
Skema.Tid = CONVERT(TIME, DATEADD(...))
--CAST
Skema.Tid = CAST(DATEADD(...) AS TIME)