每日现有表格的副本以跟踪变更

时间:2016-10-17 06:36:46

标签: sql tsql

我的客户数据库中有一个名为DEALER_DETAILED的表。在该表中,STATUS列表示3个参数,如OPERATIONAL,DEACTIVE,NON-OPERATIONAL。

每晚3-6点之间,其中一个参数可能会改变。例如,今天DEALER_CODE状态之一是可操作的但明天之后DEALER_CODE状态将是DEACTIVE。我不想使用触发器,这就是为什么,使用存储过程我需要每天获取该表的副本并编写另一个查询来跟踪更改。

对于复制和跟踪更改,我编写了如下查询,但目前它不起作用。我的意思是我现在无法跟踪更改。

这就是我写的。你能帮我解决一下这个代码有什么问题吗?

> ALTER PROCEDURE [dbo].[sp_CreateDealertTable]  AS
> 
> BEGIN
> 
> SET NOCOUNT ON;
> 
> IF EXISTS (SELECT *
>                            FROM   sys.objects
>                            WHERE  object_id = Object_id(N'[dbo].[Dealer_Detailed_old]')
>                                           AND TYPE IN ( N'U' ))
>                 DROP TABLE [dbo].[Dealer_Detailed_old];
> 
>    PRINT 'Creating table [dbo].[Dealer_Detailed_old].';
> 
>    CREATE TABLE dbo.Dealer_Detailed_old ( [DealerCode]
> nvarchar(32),[DealerName] nvarchar(max),[Status] nvarchar(20))
>       
>        INSERT INTO Dealer_Detailed_old
>             SELECT DEALER_CODE,DEALER_NAME,[STATUS] FROM dbo.DEALER_DETAILED
>             
>       END

step 2---track changes

      IF OBJECT_ID('tempdb..#tempstatus') IS NOT NULL
drop table #tempstatus

      SELECT * INTO #tempstatus FROM
      (
            SELECT 
                  old.DealerCode as DEALERCODE, old.[Status] as STATUSOLD ,new.[STATUS] AS STATUSNEW
            FROM 
                   [dbo].[Dealer_Detailed_old] as old
            INNER JOIN
                  [dbo].[DEALER_DETAILED] as new ON old.DealerCode = new.DEALER_CODE
            WHERE 
            old.[Status] <> new.[STATUS]
            ) as tbl2


IF (SELECT COUNT(*) FROM #tempstatus)> 0 

1 个答案:

答案 0 :(得分:0)

我不明白为什么你总是丢桌子,但没关系。

要跟踪表格上的更改,我通常会这样做(示例):

表1:汽车(ID,颜色,名称) 表2:Cars_log(ID,CarID,颜色,名称,Changed_at)

每当您在Cars-Table中插入内容时,请将其插入Cars_log表中,包括更改时间(Changed_at = NOW())。