sql-server - 根据条件将数据从表 1 归档到表 2 | SQL Server 2017 Express

标签 sql-server archive auto-update

我有一个包含两个表的数据库:

Student 包含以下内容 栏目:

StudentID int identity, 
StudentFN, 
StudentLN, 
Active bit, 
EnrollmentDate

ArchivedStudent 包含以下列:

ArvchivedStudentID int identity, 
StudentID int, 
StudentFN, 
StudentLN, 
WithdrawalDate getdate(), 
ReasonDropped

从长远来看,我希望为表 AcrchivedStudent 安排自动更新,并从列 StudentID、StudentFNStudentLN 中移动数据当“Active”列从 1(真)更改为 0(假)时,从表 Student 到表 ArchnivedStudent

这是我的启动脚本不起作用:

update [as]
set [as].StudentID = s.StudentID,
 [as].StudentFN = s.StudentFN,
 [as].StudentLN = s.StudentLN
from ArchivedStudent [as]

 inner join Student s
on [as].StudentID = s.StudentID
where s.Active = 0

go

问题是它不返回任何结果。

一旦我能够更新表ArchivedStudent,我想删除学生表中事件状态更改为 0 的学生的数据。

最佳答案

您的问题对于流程仍然不是很清楚。例如,您是否希望允许学生在移至存档表之前先停用一段时间,还是希望学生停用后立即将其移至存档表?

如果是后者,这就容易得多:

INSERT INTO ArchivedStudent (StudentId, StudentFn, StudentLn, WithdrawalDate)
SELECT S.StudentId, S.StudentFn, S.StudentLn, GETDATE()
FROM Student S
WHERE StudentId = ?

DELETE FROM Student WHERE StudentId = ?

如果是前者,那就更具挑战性,我们需要更多细节。

更新1:

要根据计算值设置提款日期,请使用以下命令:

INSERT INTO ArchivedStudent (StudentId, StudentFn, StudentLn, WithdrawalDate)
SELECT S.StudentId, S.StudentFn, S.StudentLn, CAST(DATEADD(D,14,GETDATE()) AS DATE)
FROM Student S
WHERE StudentId = ?

注释 1:在 DATEADD() 中,对 future 日期使用正值,对过去日期使用负值。如果除了日期之外您还需要实际时间,您可以删除 DATE CAST。

注2:原始答案中发布的 DELETE 脚本仍然有效。

关于sql-server - 根据条件将数据从表 1 归档到表 2 | SQL Server 2017 Express,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51118072/

相关文章:

sql - ']'附近的语法不正确。

java - 使用 Java 解压缩多部分 zip 文件卷

java - 我如何将字符串数组项分配给另一个类中的 edittext ,以便在用户模式下用户更改 edittext 时,项目也会更改?

dart - dart:html-将字符串从HttpRequest转换为List <int>

c# - SevenZipSharp 无法解压某些 tar 文件

Android应用程序无数据库升级

ios - 在其他国家/地区重新发布 iOS 应用程序?

sql-server - 使用 Entity Framework 发布 Web API 时出错

sql - 计算一个整数在一列中出现的次数

sql - SQL Server 中特定列的更改跟踪