Sql 仅在数据库而非表上触发
在表中插入或更新数据时,我希望主键和表名插入到另一个表中。Sql 仅在数据库而非表上触发,sql,sql-server-2008,Sql,Sql Server 2008,在表中插入或更新数据时,我希望主键和表名插入到另一个表中。 我需要在一天结束时核对今天更新的所有表格 请建议。谢谢。看看CDC- 或保罗·尼尔森的。选择名称 从sys.objects 其中DATEDIFF(D,modify_date,GETDATE())
我需要在一天结束时核对今天更新的所有表格 请建议。谢谢。看看CDC- 或保罗·尼尔森的。
选择名称
从sys.objects
其中DATEDIFF(D,modify_date,GETDATE())<1
通过使用此查询,您可以获得对数据库的所有修改。代替1,您可以给出您希望看到变化的天数。我已经计算出类似的结果……我希望它能回答您的问题
每个表需要一个触发器。检查这个答案@Meherzad-完全脱离主题不确定这有多可靠…谢谢。我试试看。谢谢。但是我没有从你那里得到完整的解决方案。你是否愿意为我提供任何其他帮助链接?就我而言,这个问题很清楚。Manoj需要跟踪每天更新的表,并且能够看到插入/更新记录的主键值。我就是这样理解的。
SELECT name
FROM sys.objects
WHERE DATEDIFF(D,modify_date, GETDATE()) < 1
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')