我需要编写一些将监视SQL表的C#代码,并且当插入新记录时,它将在其他表中使用新插入的数据创建另一条记录。我需要保证每次都会这样做。这将是一个24/7运行的Windows服务作为主机。
我可以通过选择“选择不在......的位置”进行检查,但我想知道是否有更好的方法。 SQL Service经纪人是否仍然是城里唯一的游戏,或者有多长时间以来更可靠的东西?
答案 0 :(得分:2)
在插入时创建trigger
。
例如,如果您有“Users”表,并且您想在任何人在“Users”表中插入数据时在Users_Salary表中插入记录。
CREATE TRIGGER trgAfterInsert ON [dbo].[Users]
FOR INSERT
AS
declare @usrid int;
declare @usrname varchar(100);
select @usrid=i.usr_ID from inserted i;
select @usrname=i.usr_Name from inserted i;
insert into Users_Salary
(Users_ID,UserName, Salary,DateTimestamp)
values(@usrid,@usrname,10000,getdate());
PRINT 'AFTER INSERT trigger fired.'
GO
答案 1 :(得分:1)
如果您不想在数据库中执行100%的操作(如触发器等...),您可以在C#代码中使用SQL查询通知:
https://msdn.microsoft.com/en-us/library/t9x04ed2(v=vs.110).aspx
答案 2 :(得分:0)
MS SQL Server具有“更改跟踪”功能,可能对您有用。您启用数据库以进行更改跟踪并配置要跟踪的表。然后,SQL Server会在每次更新时创建更改记录,在表上插入,删除,然后让您查询自上次检查以来所做记录的更改。这对于同步更改非常有用,并且比使用触发器更有效。它比管理自己的跟踪表更容易管理。这是自SQL Server 2005以来的一项功能。
How to: Use SQL Server Change Tracking
更改跟踪仅捕获表的主键,让您查询哪些字段可能已被修改。然后,您可以查询这些表上的表连接以获取当前数据。如果您希望它捕获数据,您也可以使用Change Capture,但它需要更多的开销,至少需要SQL Server 2008企业版。
使用这些功能,您可以创建服务或SQL代理作业,以定期查看更改表,并对报告已更改的数据执行必要的工作。