如何拥有Sql表列的历史记录。

时间:2018-04-27 07:30:55

标签: sql sql-server

我有一个名为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),
    );

1 个答案:

答案 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