【问题标题】:Detect Insert on SQL Server table and execute C# code检测 SQL Server 表上的插入并执行 C# 代码
【发布时间】:2018-10-03 14:46:19
【问题描述】:

我想在我的 SQL Server 表上创建一个触发器,一旦创建了一个新行,它应该检查表中是否已经存在相同的数据(对于某些列);如果是这样,它应该生成一个包含重复行的报告。

请问这样可行吗?如果是,我该怎么做?非常感谢

【问题讨论】:

  • 你想自己实现唯一约束吗?
  • 不要在触发器中执行此操作。创建一个唯一的约束,一开始就不允许有错误的数据。
  • 是的,这可能吗? (检测新行并检查表上是否存在相同的数据,如果存在,我应该生成报告)
  • 这不是坏数据,假设两个人年龄相同,姓名相同,居住在同一个国家,我只需要检查这些数据,我不需要查看每个人的唯一标识符,这就是为什么我想获取一些特定数据而不是全部

标签: c# sql-server triggers


【解决方案1】:

如果您真的想这样做,您可以执行以下操作:

创建一个 SQL 代理作业来调用生成报告的 C# 程序。

从您的触发器中调用该作业:

CREATE TRIGGER TriggerName
ON TableName
AFTER INSERT
AS
--Do your duplicate row processing

--Call job if needed
   EXEC msdb..sp_start_job 
    @job_name = 'JobName';
GO

【讨论】:

  • 感谢您的回答,这是识别重复行并生成报告的最佳方法还是我可以用更好的解决方案来做到这一点?
  • 好吧,我从您上面的 cmets 中假设您希望允许它们,所以这应该工作得很好。只是要小心有大量的单个插入,因为这将为每个插入调用该工作。如果您正在执行批处理,即 INSERT/SELECT,那么这将被调用为批处理。
  • 要更具体地说明您的问题,报告是否必须是即时的?如果没有,您可以安排该作业每 XX 分钟运行一次。或者您可以在调度程序中创建一个计划任务来每隔一段时间运行您的程序。真的取决于你的要求。
  • 是的,报告应该是即时的,如果不是,安排它会更容易,但我需要在每次重复插入后生成它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多