【问题标题】:Can I call a C# function by a SQL Server trigger?我可以通过 SQL Server 触发器调用 C# 函数吗?
【发布时间】:2011-01-27 07:57:23
【问题描述】:

一个外部应用程序进入我的数据库,用于在 Sql server 表中插入行。

我自己有一个网络应用程序,我想在这个表中的每个插入上,做一些服务器端的处理。

我的想法是在表上插入触发器,然后调用适当的函数。

最好的方法是什么?

我使用带有 LINQ to SQL 的 framework 3.5 和一个 SQL Server 2005 数据库。

编辑:感谢您的回答。 SQL Server CLR 集成不这样做。支持的少数库不符合我的要求。

我必须记录的表可能每 5 分钟记录一条新记录,但不会太多。 也许我可以每分钟在桌子旁听一份工作,看看身份证,拿走所有的新身份证,做我的治疗。 我的解决方案是不是太丑了?

【问题讨论】:

  • 从来没有听说过这样的事情。也许您需要以不同的方式处理您的问题。
  • 我可以在 SQL 存储过程中完成所有操作,但我失去了使用 Linq 的好处
  • 如果你能在 SP 中做到这一点,我会建议这样做。如果不是真的有必要,从 SQL Server 转到 C# 只是为了返回 SQL Server 在我看来太复杂了。另一方面,我不熟悉 Linq 以及使用它而不是 TSQL 可以获得的好处。
  • 您在问题中写道:“SQL Server CLR 集成无法做到这一点”,但您仍然接受了同样的答案吗?

标签: c# asp.net sql-server linq-to-sql triggers


【解决方案1】:

【讨论】:

  • 不是可能,但正是他需要的(除非你不能从触发器调用 SQL-CLR 函数)。
  • 感谢您的确认 :)
  • 感谢您的想法。我尝试,尝试并重试,但是将CLR与Linq一起使用太痛苦了。想要尝试的人的一个很好的例子:codeproject.com/KB/database/Managed_Code_in_SQL.aspx
  • 好的,所以我找到了不同的方法,但你回答了我的问题,我会再保留这个!
  • 此链接已失效
【解决方案2】:

如果您的函数需要很长时间才能运行,或者要访问不属于同一个数据库的资源,您可能需要考虑将函数调用与触发器分离(以便原始语句导致触发器触发可以完成)。

在这种情况下,您可能需要查看 Service Broker,或者只是使用单独的表来对调用函数的请求进行排队(并使用 SQL 代理作业将这些请求出列并调用函数)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 2021-07-05
    • 2015-10-01
    相关资源
    最近更新 更多