2
A
回答
3
0
SELECT name
FROM sys.objects
WHERE DATEDIFF(D,modify_date, GETDATE()) < 1
通過使用此查詢,您可以獲得所有數據庫修改。代替1你可以給你不想看到變化的日子。
+0
不知道這是多麼可靠.... –
+0
謝謝。我會嘗試。 –
0
我已經想出了這樣的事情......我希望它能回答你的問題。
- 示範
- 創建SQL對所有表
- 簡單的插入語句創建觸發器創建一些測試表。
CREATE TABLE [dbo].[log_table]( [table_name] [varchar](1000) NULL, [column_name] [varchar](1000) NULL, [column_value] [varchar](1000) NULL, [datetime] [datetime] NULL ) GO
CREATE TABLE [dbo].[Animals](
[AnimalID] [int] IDENTITY(1,1) NOT NULL,
[AnimalName] [varchar](50) NULL,
CONSTRAINT [PK_Animals] PRIMARY KEY CLUSTERED
([AnimalID] ASC)
)
GO
CREATE TABLE [dbo].[Countries](
[CountryID] [uniqueidentifier] NOT NULL,
[CountryName] [varchar](50) NULL,
CONSTRAINT [PK_Countries] PRIMARY KEY CLUSTERED
([CountryID] ASC))
ALTER TABLE [dbo].[Countries] ADD CONSTRAINT [DF_Countries_countryID] DEFAULT (newid()) FOR [CountryID]
GO
SELECT ' IF OBJECT_ID ('+ CHAR(39) + SCHEMA_NAME(tbl.SCHEMA_ID) + '.trg_' + tbl.name + CHAR(39) + ',''TR'') IS NOT NULL ' + ' DROP TRIGGER ' + SCHEMA_NAME(tbl.SCHEMA_ID) + '.trg_'+ tbl.name + ';' + ' EXEC (' + CHAR(39) + ' CREATE TRIGGER ' + SCHEMA_NAME(tbl.SCHEMA_ID) + '.trg_'+ tbl.name + ' ON '+ SCHEMA_NAME(tbl.SCHEMA_ID) + '.' + tbl.name + ' FOR INSERT,UPDATE AS ' + ' DECLARE @newval varchar(1000) ' + ' SELECT @newval ='+ COL_NAME(tbl.object_id, ic.column_id) + ' FROM INSERTED' + ' INSERT INTO log_table(table_name,column_name,column_value,datetime) VALUES('+ CHAR(39)+ CHAR(39) + SCHEMA_NAME(tbl.SCHEMA_ID) +'.'+ tbl.name + CHAR(39)+ CHAR(39) + ' ,'+ CHAR(39)+ CHAR(39) + COL_NAME(tbl.object_id, ic.column_id) + CHAR(39)+ CHAR(39) + ' ,'+ '@newval,getdate()'+ ')' + CHAR(39)+ ')' FROM sys.tables AS tbl INNER JOIN sys.key_constraints AS kc ON kc.parent_object_id = tbl.object_id INNER JOIN sys.indexes AS i ON kc.unique_index_id = i.index_id AND kc.parent_object_id = i.object_id INNER JOIN sys.index_columns AS ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id WHERE tbl.type = 'U' AND ic.is_included_column = 0 and tbl.name NOT IN ('sysdiagrams','log_table') ORDER BY tbl.object_id, ic.key_ordinal;
現在插入到我們的表
INSERT INTO Countries(CountryName) VALUES('South Africa') INSERT INTO Countries(CountryName) VALUES('USA') INSERT INTO Countries(CountryName) VALUES('Brazil') INSERT INTO Countries(CountryName) VALUES('Zimbabwe') INSERT INTO Countries(CountryName) VALUES('Africa is not a country') INSERT INTO Animals(AnimalName) VALUES ('Lion') INSERT INTO Animals(AnimalName) VALUES ('African Elephant') INSERT INTO Animals(AnimalName) VALUES ('Rhinoceros') INSERT INTO Animals(AnimalName) VALUES ('Leopard') INSERT INTO Animals(AnimalName) VALUES ('Cape Buffalo')
+0
就我而言,這個問題很清楚。 Manoj需要跟蹤每日更新的表格,並且能夠查看插入/更新記錄的主鍵值。這就是我的理解。 – Thato
相關問題
- 1. 我有一個在插入表格後觸發的數據庫觸發器。
- 2. 數據庫觸發器,它是異步?
- 3. H2數據庫觸發器
- 4. Informix數據庫觸發器
- 5. 數據庫觸發器不保存
- 6. knockout beforeRemove:它是否像數據庫「而不是」觸發器?
- 7. hook_user():在數據庫中插入額外的字段不僅僅是表格
- 8. 數據觸發器將不會觸發
- 9. 反正是有可在SQL服務器數據庫觸發器
- 10. SQL服務器:觸發VS數據庫觸發器
- 11. 而不是在所有表格上插入觸發器
- 12. AJAX w /數據庫 - 不僅僅是一張表
- 13. 在觸發器中找不到數據
- 14. 如何在完成數據插入表後觸發觸發器
- 15. 使用MySQL數據庫觸發器
- 16. 數據庫觸發器和計算
- 17. 數據庫觸發器何時壞?
- 18. Mysql中的跨數據庫觸發器
- 19. 使用HR數據庫的觸發器
- 20. 數據庫觸發器和Hibernate
- 21. 替換數據庫觸發器機制
- 22. Django版本的數據庫觸發器?
- 23. 數據庫phpmyadmin插入觸發器
- 24. Azure Cosmos /文檔數據庫觸發器
- 25. Magento EE數據庫沒有觸發器
- 26. 數據庫觸發器和JMS
- 27. 如何知道數據庫觸發器是DROP_TABLE還是ALTER_TABLE?
- 28. 更新觸發器後MySQL中的NULL處理觸發器僅在數據更改時觸發
- 29. 通知不會顯示在數據庫觸發器上
- 30. 在不同的數據庫中創建觸發器
您需要每個表一個觸發器。 –
檢查這個答案http://stackoverflow.com/questions/946118/how-to-create-ddl-trigger-to-all-databases-in-sql-server-2005-instance – Meherzad
@Meherzad - 完全脫離主題 –