2012-09-19 81 views
0

我有被重新加載,每天早上trunkated表。它沒有任何日期/時間列或自動增量列。查找最近添加的行,並添加值

我需要查詢其計算出哪些行加入每天早晨和添加新列表中的每一行某一個值(一個,如果它是新的,另外一個,如果它不是)。另外,如果可能的話,添加包含添加行的日期的第二列。

我在想什麼,是我每天覆製表,然後將其與新的第二天進行比較。

這甚至可能做的,如果是的話,我該怎麼辦呢?有沒有更好的方式而不改變數據如何寫入表格?

+0

顯示你已經試過了什麼代碼,所以我們可以幫助它 – 2012-09-19 06:41:59

+0

爲什麼它每天早上被截斷並重新編制?只有這樣才能把數據放回去呢? – BugFinder

+0

日期來自我們的ERP系統,它可能會確保數據是最新的。不幸的是,我無法改變每天早上如何以及有什麼數據來到桌子上。我還沒有真正嘗試過任何代碼,因爲我不知道如何去做這件事。 – Sporki

回答

0

是,創建第二個表似乎是一個合理的解決辦法,因爲在原始表的約束

好了,所以第1天,創建你的影子表,並填充它:

CREATE TABLE Shadow (/* Same columns as original, plus added date, magic value column */) 
INSERT INTO Shadow (/* Same columns as original, plus added date, magic value column */) 
SELECT /* Columns, plus todays date and the magic value column */ FROM Original 

然後,在隨後的日子:

ALTER TABLE Original ADD MagicColumn int null 
GO 
ALTER TABLE Original ADD AddedDate date null 
GO 
MERGE INTO Original o 
USING Shadow s 
    ON o.PK1 = s.PK1 and o.PK2 = s.PK2 

WHEN MATCHED 
    THEN UPDATE 
     SET 
     AddedDate = s.AddedDate, 
     MagicColumn = 1 /* Value for updated */ 

WHEN NOT MATCHED BY SOURCE 
    THEN UPDATE 
     SET 
     AddedDate = CURRENT_TIMESTAMP, 
     MagicColumn = 0; /* Value for new */ 
GO 
TRUNCATE TABLE Shadow 
GO 
INSERT INTO Shadow (/* Same columns as original, plus added date, magic value column */) 
SELECT /* All columns */ FROM Original 

一些語句需要的是在不同批次(如ALTER TABLE對那些需要在不同的批次比MERGE),所以如果你在一個SQL代理作業這樣做,他們應該是在單獨的步驟。

我一直提到的「魔法值列」,因爲我不知道怎麼稱呼包含列:

一定值(如果其中一個是新的,如果它不是另一個)

+0

非常感謝!這似乎正是我正在尋找的。我會讓你知道它是如何工作的。 – Sporki