我需要一些帮助来创建一个存储过程/查询(只要它工作并不重要),当我插入一个新行时会发生以下情况。这是一个非常简单的表,有4列与其他表相关
CREATE TABLE [#loginid_name](
[Login_ID] [int] NOT NULL,
[Login_ID_Name] [varchar](30) COLLATE Latin1_General_CI_AI NOT NULL,
[Date_Begin] [datetime] NOT NULL,
[Date_Finish] [datetime] NULL)
这有意义吗?
我可以将这些内容放在一起,但似乎无法将其编码为SQL中的单个查询/存储过程。我将使用VBA从Excel插入这些行,因此我可以将其硬编码到VBA上的插入查询中。
BTW 我想避免使用触发器,因为我过去曾经尝试过这些触发器,它们给我带来了很多麻烦。我对这个SQL事情很陌生。
你能帮助我吗?
谢谢!
答案 0 :(得分:2)
我会以不同的方式处理这个问题,因为完成日期基本上是基于同一个表上其他记录的计算字段,我会保留它而不是存储它。所以你可以设置一个类似的视图:
SELECT Login_ID,
Login_ID_Name,
Date_Begin,
( SELECT MIN(Date_Begin)
FROM [#loginid_name] AS l2
WHERE l2.Login_ID = l.Login_ID
AND l2.Date_Begin > l.Date_Begin
) AS Date_Finish
FROM [#loginid_name] AS l;
这样您无需通过VBA或触发器管理Date_Finish列,您只需引用此视图而不是基表并获取结束日期。因此,如果您的Date_Begin在插入后因任何原因而更新,那么您之前记录的Date_Finish将保持同步。考虑到这样的更新,这可能会导致多个记录的date_finish发生变化,这更加简单。