Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL 2005在插入时更新列_Sql_Excel_Vba_Sql Server 2005_Insert - Fatal编程技术网

SQL 2005在插入时更新列

SQL 2005在插入时更新列,sql,excel,vba,sql-server-2005,insert,Sql,Excel,Vba,Sql Server 2005,Insert,我需要一些帮助来创建一个存储过程/查询(只要它能正常工作就无关紧要),在这里插入新行时会发生以下情况。这是一个非常简单的表,有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] [da

我需要一些帮助来创建一个存储过程/查询(只要它能正常工作就无关紧要),在这里插入新行时会发生以下情况。这是一个非常简单的表,有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)
  • 插入新行时:查询检查是否有该ID的其他记录具有更高的开始日期(如果有多行具有更高的开始日期,则无所谓,我只需要更接近插入的行)
  • 如果有,则将新行的“完成日期”设置为现有行的“开始日期”
  • 如果没有,则将新插入的日期\u finish设置为空
  • 检查是否有该ID的其他记录的开始日期较低,但结束日期较高(或空)
  • 如果有,则将该记录的日期_finish更新为新插入的日期_begin值
  • 这有意义吗

    我可以在脑海中把这些片段组合起来,但似乎无法将其编码到SQL中的单个查询/存储过程中。我将使用VBA从Excel中插入这些行,以便将其硬编码到VBA上的插入查询中

    顺便说一句我想避免使用触发器,因为我在过去尝试过它们,它们给我带来了很多麻烦。我对SQL这个东西很陌生

    你能帮我吗


    谢谢

    我会采用不同的方法,因为完成日期本质上是一个基于同一表中其他记录的计算字段,所以我会将其保留为计算字段,而不是存储字段。因此,您可以设置如下视图:

    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列,只需引用此视图而不是基表并获取结束日期。因此,如果插入后出于任何原因更新了开始日期,则上一条记录的结束日期保持同步。这要简单得多,因为当进行这样的更新时,可能会导致多个记录的完成日期发生更改。

    先生,您是一位很好的绅士。非常感谢你。你的解决方案正好满足了我的需要。我将继续按照你的建议修改我的数据库。我有一个@ckuhn203-谢谢你的输入。虽然您的问题似乎比我的问题复杂得多,但它确实揭示了一些问题,我将深入阅读,以继续学习更多有关SQL的知识。