2011-11-11 145 views
1

我使用下面列出的行數都是我的表:查詢查看新/更新的表

select convert(varchar(30),object_name(id)) [Table Name], rows, ModifiedOn from sysindexes 
where object_name(id) not like 'sys%' and indid = 1 
order by object_name(id) 

我承認,我發現這個地方,只有擁有它是什麼的概念想法這樣做。但爲了我的目的,我想要執行應用程序操作並對數據庫中發生的情況進行逆向工程,可以很好地識別新行(我將結果複製並粘貼到Excel中進行比較)。

現在,我還想知道哪些表已被更新。在(幾乎)所有的表格中都有一個ModifiedOn列,所以我希望我可以將這個最大值添加到我的輸出中,這會告訴我表的內容何時最後更新。

我不知道如何加入這兩個,任何幫助表示讚賞。

+0

你想要做一個查詢而不是,例如,使用觸發器通知您有關更改(可能通過更新「上次修改數據」表)? – DOK

回答

0

我強烈建議不要這種方法,因爲它依賴於數據庫並且不可靠。

在ON UPDATE上創建ON INSERT觸發它是正確的解決方案,然後在觸發器中,您可以將新數據或更新數據放入可以查詢的單獨表中。觸發器是監視數據庫中變化的工具,無需在使用它們的應用程序中執行任何操作。

例觸發對錶MY_TABLE(ID,姓名) '更新後':

CREATE TRIGGER mark_changes AFTER UPDATE ON my_table FOR EACH ROW 
BEGIN 
    INSERT INTO tracking_table VALUES "Change in table my_table", OLD.id, NEW.id 
END$$ 

這裏假設你有一個表tracking_table(描述,old_id,NEW_ID)

+0

謝謝 - 不幸的是,我不認爲我們的數據庫人要我添加任何東西。只是一個謙虛的分析師試圖理解一直被遺忘的數據庫流程,所以我試圖找到一種只使用選擇的概念。 –

+0

我的答案仍然正確......順便說一句,沒有(至少是通用的)方法來檢查數據庫中的所有更改,除非有一些日誌或某些DBMS特定的日誌表,這是不可能的。 – zmilojko