你好,我需要一些糟糕的存储过程,我想不出这样的
我有这些表
指标分析
CriteriaId
Title
.......
表 StepCriterias
StepID
CriteriaId
OrderNum
表步骤
StepID
ProcedureID
Title
...
所以我选择具有特定名称和特定数字的步骤的所有StepCriterias
SELECT *
FROM StepCriterias sc
INNER JOIN Steps s ON sc.StepId = s.StepId
WHERE
s.Title = 'MYteststep'
ANd s.ProcedureId = 2
假设这个查询返回五行;现在我应该UPDATE
所有生成的行和OrderNum
应该增加1(我应该增加每行的OrderNum
)。这是我的第一个问题,我想不出一个存储过程就是那个。
答案 0 :(得分:1)
可能就是这样。
UPDATE sc
SET OrderNum = OrderNum + 1
FROM StepCriterias sc
INNER JOIN steps s ON sc.StepId = s.StepId
WHERE s.Title = 'MYteststep'
AND s.ProcedureId = 2
答案 1 :(得分:1)
您可以使用join
语句中的exsits
条件替换update
逻辑:
UPDATE StepCriterias sc
SET OrderNum = OrderNum + 1
WHERE EXISTS (SELECT *
FROM steps s
WHERE sc.StepId = s.StepId AND
s.Title = 'MYteststep' AND
s.ProcedureId = 2)
答案 2 :(得分:0)
您可以将UPDATE
与子查询一起使用,例如:
UPDATE StepCriterias
SET OrderNum = sc.OrderNum + 1
WHERE StepId IN (SELECT StepId
FROM StepCriterias sc
INNER JOIN steps s ON sc.StepId = s.StepId
WHERE s.Title = 'MYteststep' AND s.ProcedureId = 2);
答案 3 :(得分:0)
如果您想要每次匹配的增量,且stepcriteria
可能匹配多次,则:
UPDATE StepCriterias sc
SET OrderNum = (OrderNum +
(SELECT COUNT(*)
FROM steps s
WHERE sc.StepId = s.StepId AND
s.Title = 'MYteststep' AND
s.ProcedureId = 2
)
WHERE EXISTS (SELECT 1
FROM steps s
WHERE sc.StepId = s.StepId AND
s.Title = 'MYteststep' AND
s.ProcedureId = 2
);
在大多数数据库中有更简单的方法来表达这一点,但以上是适用于任何数据库的通用语法。