gpt4 book ai didi

sql - T-SQL,计划作业中的多个更新

转载 作者:行者123 更新时间:2023-12-04 14:33:16 26 4
gpt4 key购买 nike

我一直在开发一个用作计划作业的查询。简而言之,我要对一个表进行一些具体的计算,并根据计算结果更新一些列(如STATE)。

一个样本(就像目前的样子)可以展示如下:

UPDATE TEST_TABLE SET STATE = 1
WHERE {some condition}

UPDATE TEST_TABLE SET STATE = 2
WHERE {some condition}

UPDATE TEST_TABLE SET STATE = 3, SOME_OTHER_COLUMN={value}
WHERE {some condition}

WHILE(some condition)

BEGIN
UPDATE TEST_TABLE SET STATE = 4, SOME_OTHER_COLUMN={value}

WHERE {some condition}

END

我在上面试图演示的是查询的流程。如上所示,我多次更新单个表,主要是根据不同的条件设置具有不同值的单个状态列。

我还必须使用 while 循环而不是游标(因为性能不佳),因为需要根据这些条件用小组更新此表中的数据。

假设所有查询都包含在事务和 try-catch block 中。

最后,这是我的问题:
由于这将是一个计划在晚上执行的工作,所以性能对我来说不是最重要的。但是,我无法弄清楚如何使用更清洁、更高效(性能方面)的查询来进行相同的操作。我需要一些建议。
请注意,{some condition} 区域包含具有 EXISTS 功能的子查询。所以原始代码看起来比这要困惑得多。提前致谢。
——奥赞

最佳答案

如果表足够小,那么多个查询不会受到伤害。

即使它比WHERE 的位置大得多。由于索引,查询的子句可以有效地工作,你可能没问题。

您可以合并查询 - 如果 WHERE子句是一样的,那么你可以把它们放在一起。

IMO,代码越容易阅读,就越容易维护。如果您没有获得重大的性能提升,那么整合真的没有意义。

查询的效率是通过它消耗的资源量来衡量的,而不是它的整合程度或看起来有多复杂。您最好查看执行计划并找出您需要的任何结构更改或索引。

最吸引我眼球的是你尝试了CURSOR现在已将其更改为 WHILE环形。

你会发现基于集合的操作比游标更有利于数据库工作。

根据 OP 评论编辑

由于该表预计会很快填满,因此您应该进行负载测试。用大量测试数据(假设是一年)加载表,然后查看查询的执行情况。

关于sql - T-SQL,计划作业中的多个更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8174782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com