sql - 如何在参数之一中使用 CASE 表达式创建 SQL 命令?
问题描述
我想在SqlCommand
位于 OLE DB 命令中创建一个 SQL 查询,以从文件 txt 更新现有数据库,并且一个信息取决于另一个。例如,如果我有,decision=non
我将拥有somme=0 else somme=(I add five values)
当我手动添加数据时,somme=0
无论somme=val_1+val_2+val_3+val_4+val_5
是否使用案例表达式,它都有效。
UPDATE [TP1].[dbo].[Data]
SET nom=?, val_1=?, val_2 =?, val_3=?, val_4=?, val_5=?, decision=?,
somme= (CASE
WHEN (STRCMP(decision,"NON") < 1)
THEN 0
ELSE (val_1 + val_2 + val_3 + val_4 + val_5)
END)
WHERE (numero = ?)
解决方案
您看到想要命名您的参数,您可以在values()
子句中执行此操作:
update d
SET nom = v.nom,
val_1 = v.val_1,
val_2 = v.val_2,
val_3 = v.val_3,
val_4 = v.val_4,
val_5 = v.val_5,
decision = v.decision,
somme = (case when d.decision like '%NON%'
then v.val_1 + v.val_2 + v.val_3 + v.val_4 + v.val_5
else 0
end)
from [TP1].[dbo].[Data] d cross join
(values (?, ?, ?, ?, ?, ?, ?)
) v(val_1, val_2, val_3, val_4, val_5, decision, numero)
where d.numero = v.numero;
您也可以将它们作为命名参数传递。
somme
您可能会发现成为计算列更容易。然后它总是最新的。您将删除当前定义,然后将计算列添加为:
alter table [TP1].[dbo].[Data] add somme as
(case when d.decision like '%NON%'
then val_1 + val_2 + val_3 + val_4 + val_5
else 0
end);
推荐阅读
- 3d - 3D 中 LibGDX 附近的矩形呈现块状/错误
- linux - ldd & 共享对象错误 Linux - 如何排除故障?
- python - 如何在带有opencv4的Google colab中使用SIFT和SURF算法?
- ansible - 无论如何,Ansible 变量跳过
- ruby-on-rails - 运行命令rails服务器时无法访问mac上的本地rails主机
- php - Laravel - 文件上传按钮在实时服务器中不起作用
- postgresql - docker-compose:致命:用户“postgres”的密码验证失败
- java - 自动建议组合框
- variables - 具有一些特殊值的变量的术语是什么
- flutter - 在颤动中转换或选择匹配字符串的颜色值