2016-10-17 8 views
0

顧客データベースにDEALER_DETAILEDという1つのテーブルがありました。このテーブルのSTATUS列には、OPERATIONAL、DEACTIVE、NON-OPERATIONALの3つのパラメータが示されています。変更履歴を毎日更新する既存のテーブルのコピー

毎晩3~6時の間、パラメータの1つが変更されることがあります。たとえば、今日DEALER_CODEステータスの1つが操作可能ですが、明日以降は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に何かを挿入するときは、変更の時刻(Changed_at = NOW())も含めてCars_logテーブルにも挿入します。

+0

実際に私たちは私たちが顧客から取ったWebサービスを通じてこのテーブルを作成しています。これは私たちのテーブルではありません。毎日ステータスカラムが変更される可能性があるため、この変更を追跡する必要があります。 –

関連する問題