Dai*_*Dai 5 t-sql sql-server triggers named-pipes
我需要为我的应用程序中的大多数实体添加序列号,因为我将并排运行Lucene搜索索引。
不必运行正在进行的轮询过程,或者不必通过应用程序手动运行索引器,而是在考虑以下方面:
Created默认值为的列GETUTCDATE()。Modified默认值为的列GETUTCDATE()。ON UPDATE触发器表的更新Modified到GETUTCDATE()(能这样呢作为执行UPDATE?即它添加SET [Modified] = GETUTCDATE()到SQL查询,而不是更新它单独后来呢?)ON UPDATE触发器会打电话给我的Lucene索引更新其索引(这必须是一个xp_cmdshell呼叫可能,但有消息发送到过程,而不是开始一个新的方法吗?我听说,我可以使用命名管道,但如何您是在Sproc还是触发器中使用命名管道?(搜索“ SQL Server命名管道”当然会得到无关的结果)。听起来不错,如何解决小子问题?
据我了解,您必须向现有表引入两列,并在“运行时”中处理它们(至少其中一列)并由外部组件使用。
你的前三点并不奇怪。根据触发器处理的时间,SQL Server中有两种类型的触发器:INSTEAD OF触发器(实际上在插入发生之前处理)和AFTER触发器。但是,在 INSTEAD OF 触发器内,您必须提供将数据真正插入表中的逻辑,以及您需要的其他自定义处理。如果不是真的有必要,我通常会避免这样做。
现在关于你的第四点 - 这很棘手,并且在 SQL Server 中有几种方法可以解决这个问题,但所有这些方法都至少有点难看。基本上,您必须执行外部进程或向其发送消息。我确实没有任何使用 Lucene 索引器的经验,但我想其中一种方法(执行或发送消息)将适用。
因此,您可以执行以下操作之一来直接或间接访问外部组件,即直接或通过某些代理模块访问 Lucene 索引器:
由于简单,我个人会选择第三点(job+xp_cmdshell),但这只是因为我对 Lucene 索引器如何工作缺乏任何了解。
编辑(另一个选项):
使用查询通知;SQL Server Service Broker 允许外部应用程序连接并监视感兴趣的更改。您甚至可以选择如何执行此操作(基本上是同步或异步),唯一的前提条件是您的 Service Borker 已启动、正在运行并且可供您的应用程序使用。这是一种更复杂的方法,用于通知外部组件某些内容已发生变化。