我有一个表格,里面有一组临时工,他们的合同期限可以是无限期的,可以在不同的部门续签。续签到其他部门后,需要更新结束日期,开始日期需要是结束日期加1天。
电流输出:
+---------------------+------------------+------------------+------------------+
| Name | Department | Start Date | End Date |
+---------------------+------------------+------------------+------------------+
| Tom | Finance | 2010-08-09 | 9999-12-31 |
+---------------------+------------------+------------------+------------------+
期望输出
+---------------------+------------------+------------------+------------------+
| Name | Department | Start Date | End Date |
+---------------------+------------------+------------------+------------------+
| Tom | Finance | 2010-08-09 | 2010-10-10 |
| Tom | HR | 2010-10-11 | 9999-12-31 |
+---------------------+------------------+------------------+------------------+
目前,我将现有的记录保存到一个临时表中。然后,我将多个字段连接到现有表,以查看此人之前是否存在。如果这个人存在,那么我继续将数据保存到temp表中,并在返回并更新主表之前执行更新。我不喜欢这个解决方案,而且它非常复杂。有没有更好的办法来解决上述问题?
1条答案
按热度按时间mzillmmw1#
编辑。因为已经有了一个存储过程,所以您可以将类似的逻辑嵌入到sp中。我创建了一个示例存储过程,它将获取员工姓名,更新部门,然后实现您的业务逻辑。同样,将一个真正的主键字段(而不是雇员姓名)作为参数,否则可能会更新多个记录。
一种选择是使用触发器,并利用update语句生成的输出表。当
UPDATE
语句运行时inserted
和一个deleted
生成输出表,详细说明记录的前状态和后状态。请参阅下面的代码,并尝试为您的应用程序修改它。请注意,当前版本的触发器使用雇员姓名作为更新 predicate 的一部分。如果一个特定的员工姓名有多个记录,则所有记录都将被更新。因此,在表中使用一个真正的主键字段,以确保只更新一条记录,这样做更有意义。