C# 使用TSQL SP执行控制台应用程序?

C# 使用TSQL SP执行控制台应用程序?,c#,sql-server-2005,C#,Sql Server 2005,我有一个控制台应用程序(C#),用于从SQL server(Microsoft SQL 2005)读取数据并将数据写入SQL server。我现在需要的是向表中添加一个触发器,以便在任何数据行发生更改时执行控制台应用程序 不确定Microsoft SQL server(2005)上可用于启动控制台应用程序的SP是什么?我如何从应用程序传回结果?它将作为同步或asych manor运行?是否存在任何必须配置的权限问题?存储过程可用于启动外部进程,但出于安全原因,这通常被禁用 由于控制台应用程序已经

我有一个控制台应用程序(C#),用于从SQL server(Microsoft SQL 2005)读取数据并将数据写入SQL server。我现在需要的是向表中添加一个触发器,以便在任何数据行发生更改时执行控制台应用程序

不确定Microsoft SQL server(2005)上可用于启动控制台应用程序的SP是什么?我如何从应用程序传回结果?它将作为同步或asych manor运行?是否存在任何必须配置的权限问题?

存储过程可用于启动外部进程,但出于安全原因,这通常被禁用


由于控制台应用程序已经用C#编写,也许可以将其重新编写为SQLCLR存储过程?

这对我来说似乎有点不稳定。是否有可能频繁调用触发器,导致应用程序多次启动?此外,我认为在控制台应用程序完成或失败之前,触发器不会完成。同时,导致触发器触发的操作仍将等待


应用程序是否需要立即运行?如果没有,那么您可以定期将其作为SQL代理作业运行。

触发器会减慢速度,在您的情况下,这将导致大规模混乱。触发器不是您想要在这里走的路线

您可能想考虑使用一个控制台应用程序来轮询数据库,并且每次发现更改时,它将显示更改的行以供用户使用。


您可以使用[LastUpdateDateTime]之类的字段跟踪这些更改,默认值为GetDate(),并且不在查询中发送此值。因此,它将始终具有最新的更改时间戳。或者,您可以创建一个由触发器填充的审核表。

不要从触发器启动外部进程,否则会使服务器崩溃。不管是is还是CLR过程。相反,请使用Service Broker并在触发器中发出一个SEND,将消息排入本地服务的队列,并依靠它在单独的上下文中异步执行外部相关处理。

我同意Ken的观点,您可能需要考虑更改体系结构。控制台应用程序是否正在向调用它的同一台SQL server读取和写入数据?如果是这样,您最好将该逻辑编码到触发器或存储过程本身,和/或更改您的数据库架构,使其不必如此复杂。

实际上,我正在执行此任务,以将SQLCLR移到控制台应用程序中。非常有趣。我看到了SQL代理的选项。有关于如何设置和使用的信息吗?还是举例?我的博客在刚刚被警告,事情将异步发生,即远程拉/处理将在更新提交后发生,因此在一段时间内,状态可能不一致。但这通常比另一种方法(让每个更新等待远程操作)要好得多。我可以使用代理的激活机制作为外部程序来调用web服务吗?如果可能的话,如何做到这一点?您还应该查看以下内容: