SQL查询通过循环遍历表记录并检查某些逻辑来更新记录列表?
问题描述:
我不想使用游标出于性能原因。 输入参数存储过程:ARG1,ARG2,ARG3 & ARG4 例如: 表A> A1柱和A2列, 表B> B1柱(A.A1 < => B.B1)外国N个主密钥关系和B2列。SQL查询通过循环遍历表记录并检查某些逻辑来更新记录列表?
我想更新基于A.A2值,如果状态,
if(arg1 == B.B2 && arg2 == B.B2)
{
Update A set A.A2 = 1 where A.A1 = arg4
}
else{
if(arg1 == 1 && arg3 == B.B2){
Update A set A.A2 = 0 where A.A1 = arg4
}
}
这是简单的一个记录,但表A具有匹配A.A1 = ARG4说,所以我有1000的记录如下应用上述逻辑或案例的所有记录,并希望避免使用游标...我该怎么做?
答
请尝试以下查询。
UPDATE tmp
SET tmp.A2 =
(CASE WHEN (tmp1.B2 == arg1 && tmp1.B2 == arg2) THEN 1 WHEN (arg1 == 1 && tmp1.B2 == arg3) THEN 0 ELSE tmp.A2)
FROM
A tmp
INNER JOIN
B tmp1
ON tmp.A1 = tmp1.B1
WHERE
tmp.A1 = arg4
希望这有助于!
答
一般情况下,非特异性SQL-92你可以这样做:
UPDATE A
SET A.A2 = CASE WHEN B.B2 IN (@Arg1,@Arg2) THEN 1
WHEN @arg1 = 1 AND B.B2 = @arg3 THEN 0 END
FROM A
JOIN B ON A.A1=B.B1
WHERE A.A1 = @arg4
您可能需要一个ELSE
END
之前,如果你不希望有任何值下降到(不ELSE
它会设置一个不.A2至NULL
)。
您使用的是什么RDBMS?你是否也在使用编程语言(考虑到你的例子不是标准的SQL格式)。 – Wil
那么B1是B的主键? – Neil