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

时间:2009-07-06 21:38:53

标签: c# sql-server-2005

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

不确定Microsoft SQL Server(2005)上有哪些SP可用于启动控制台应用程序?以及如何从应用程序中传递结果?它会作为同步或asych庄园运行吗?我必须配置任何权限问题吗?

5 个答案:

答案 0 :(得分:5)

不要从触发器启动外部进程,您将使服务器瘫痪。无论是xp_cmdshell还是CLR程序都无关紧要。而是使用Service Broker并在触发器中发出SEND以将消息排队到本地服务,并依赖activation异步并在单独的上下文中执行外部相关处理。

答案 1 :(得分:3)

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

由于控制台应用程序已经用C#编写,或许它可以重写为SQLCLR存储过程吗?

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

触发缓慢的事情,在你的情况下,这将导致大规模的混乱。触发器不是您想要在此处使用的路线。

您可能需要考虑使用一个轮询数据库的控制台应用程序,每次发现更改时,它都会显示已更改的行以供用户使用。

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

答案 4 :(得分:0)

我同意肯,你可能想考虑改变架构。控制台应用程序是否正在读取和写入调用它的同一SQL服务器?如果是这样,您最好将该逻辑编码到触发器或存储过程本身,和/或更改数据库模式以使其逻辑不必如此复杂。