我有一个包含两个表的数据库:
表 Student
包含以下内容
栏目:
StudentID int identity,
StudentFN,
StudentLN,
Active bit,
EnrollmentDate
表 ArchivedStudent
包含以下列:
ArvchivedStudentID int identity,
StudentID int,
StudentFN,
StudentLN,
WithdrawalDate getdate(),
ReasonDropped
从长远来看,我希望为表 AcrchivedStudent
安排自动更新,并从列 StudentID、StudentFN
和 StudentLN
中移动数据当“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/