如何从.NET中提示SQL表中的新插入?

时间:2015-11-03 20:29:00

标签: c# sql-server

我需要编写一些将监视SQL表的C#代码,并且当插入新记录时,它将在其他表中使用新插入的数据创建另一条记录。我需要保证每次都会这样做。这将是一个24/7运行的Windows服务作为主机。

我可以通过选择“选择不在......的位置”进行检查,但我想知道是否有更好的方法。 SQL Service经纪人是否仍然是城里唯一的游戏,或者有多长时间以来更可靠的东西?

3 个答案:

答案 0 :(得分:2)

在插入时创建trigger

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企业版。

Change Data Capture

使用这些功能,您可以创建服务或SQL代理作业,以定期查看更改表,并对报告已更改的数据执行必要的工作。