我有一个名为MACHINES的Sql表,其行和列很少,例如MachineId,MachineName,ProgramName,RightCount和FinishingTime。从文本文件(xyz.txt)中读取值并将其插入此表中。每次在此文本文件中读取新值时更新行。 我的问题是我如何制作一张包含此MACHINES表历史记录的额外表格。因此,如果我在文本文件中的RightCount值从3更改为4,我可以保持跟踪它。' MACHINES'中的行。表得到更新,但保留了MachineId 4中的示例的历史记录。我的总体目标不是拥有Table' MACHINES'每次我的文本文件数据发生变化时都会有如此多的数据。它需要我的数据库空间。 是否与外键有关。此过程的SQL脚本非常有用。非常感谢。
我试过 - >但是在更新后我的历史记录表中无法获得数据。
CREATE TABLE try.dbo.MACHINES
(MachineId bigint IDENTITY(1,1) PRIMARY KEY,
MachineName varchar(50) NOT NULL,
ProgramName varchar(255) NOT NULL,
RightCount int,
FinishingTime varchar(255) NULL,
);
CREATE TABLE try.dbo.MACHINES_HISTORY
(MachineStatusHistoryId bigint IDENTITY(1,1) PRIMARY KEY,
MachineId bigint NOT NULL,
CONSTRAINT FK_StatusHistory_Machines
FOREIGN KEY (MachineId)
REFERENCES dbo.MACHINES (MachineId),
);
答案 0 :(得分:1)
这有点猜测,但是,以下设置会将旧行的值INSERT
创建到表Machine_History
中:
CREATE TABLE dbo.Machine
(MachineId bigint IDENTITY(1,1) PRIMARY KEY,
MachineName varchar(50) NOT NULL,
ProgramName varchar(255) NOT NULL,
RightCount int,
FinishingTime varchar(255) NULL--, --note sure why ther ewas a comma here?
);
GO
CREATE TABLE dbo.Machine_History
(HistoryID bigint IDENTITY(1,1) PRIMARY KEY,
MachineId bigint,
MachineName varchar(50) NOT NULL,
ProgramName varchar(255) NOT NULL,
RightCount int,
FinishingTime varchar(255) NULL,
HistoryDate datetime2(0) DEFAULT GETDATE(),
CONSTRAINT FK_MachineID FOREIGN KEY (MachineID) REFERENCES dbo.Machine (MachineID));
GO
CREATE TRIGGER dbo.Machine_Update ON dbo.Machine AFTER UPDATE AS
INSERT INTO Machine_History (MachineID, MachineName, ProgramName, RightCount, FinishingTime)
SELECT MachineID, MachineName, ProgramName, RightCount, FinishingTime
FROM deleted;
GO