2016-10-17 89 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

實際上,我們通過從客戶那裏獲得的網絡服務來創建此表。這不是我們的表格。每天狀態欄可能會更改,因此我們需要跟蹤此更改。 –