2016-10-17 75 views
0

我在我的客户数据库中有一个名为DEALER_DETAILED的表。在该表中,STATUS列指示3个参数,如操作,非活动,非操作。现有表的日期跟踪更改

每晚在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 

回答

0

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

要跟踪表的变化,我平时做这样的(例子):

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

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

+0

实际上,我们通过从客户那里获得的网络服务来创建此表。这不是我们的表格。每天状态栏可能会更改,因此我们需要跟踪此更改。 –