如何在每5分钟运行一次的SQL Server代理作业中仅更新一次列

蒂姆·伯内特-贝斯手

我只想在每5分钟命中一次的代理作业中仅运行一次此代码:

UPDATE mytable
SET text_column = (CONCAT('Added text - ', text_column))
WHERE status IN ('status1', 'status2', 'status3')
  AND other_criteria IN ('other_criteria1', 'other_criteria2', 'other_criteria3');

新记录可能会在白天和晚上的任何时间插入-这就是为什么该作业每5分钟运行一次的原因。

text_column 插入记录时,可以为NULL,也可以不为NULL(这无关紧要,但是阻止了我在where子句中使用ISNULL。)

status 可能会在作业运行之前即时更改(这也没关系,除了我无法将上述查询更新为仅针对那些指定状态运行,然后再更改状态以确保更新不会再次发生[因为其他记录处于任何状态时,仍然可能需要进行交易]。)

other_criteria 通常是静态信息,但绝不是唯一的...

所以,我想发生的基本上是:

运行5分钟的作业-新记录= status1&other_criteria1将text_column设置为“ Added_text-(text_column)”

然后,我想避免在下次作业运行时将此记录的文本列设置为“添加的文本-添加的文本-(text_column)”,即使该作业仍与我的where子句中的“状态”和“ other_criteria”匹配...

这可能在我的where子句中没有更具体的说明吗?

卢卡斯·索兹达(Lukasz Szozda)

最简单的方法是过滤掉添加的文本:

UPDATE mytable
SET text_column=(CONCAT('Added text - ', text_column))
WHERE status IN ('status1', 'status2', 'status3')
AND other_criteria IN ('other_criteria1', 'other_criteria2', 'other_criteria3')
AND text_column NOT LIKE 'Added text - %';

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章