插入SQL 2005更新列

我需要一些帮助来创build一个存储过程/查询(只要它工作并不重要),在插入新行时发生以下情况。 这是一个非常简单的表,其中有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) 
  1. 当我插入一个新的行时:查询检查是否有更高的begin_date的那个ID的其他logging(如果有多个更高的begin_date行,我只需要更接近插入的一个)
  2. 如果有,则将新行的date_finish设置为现有行的date_begin
  3. 如果没有,则将新插入的date_finish设置为NULL
  4. 检查该ID是否有其他logging的date_begin较低,但较高(或NULL )date_finish
  5. 如果有,则将该logging的date_finish更新为新插入的date_begin值。

那有意义吗?

我可以将这些部分放在一起,但似乎无法将其编码到SQL中的单个查询/存储过程中。 我将使用VBA从Excel中插入这些行,这样我就可以将这些代码硬编码到VBA上的插入查询中。

顺便说一句,我想避免触发器,因为我已经尝试过他们,他们给我很多麻烦。 我在这个SQL的东西很新。

你可以帮我吗?

谢谢!

我会以不同的方式来处理,因为完成date本质上是基于同一个表上其他logging的计算字段,所以我会保留它而不是存储。 所以你可以设置一个视图如下所示:

 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或触发器来pipe理Date_Finish列,只需引用此视图而不是基表并获取结束date即可。 所以,如果你的Date_Begin在插入之后因为任何原因被更新,那么你上一个logging的Date_Finish保持同步。 这要简单得多,因为当进行这样的更新时,可能会导致多个logging的date_finish改变。