如何在其中一个参数中使用 CASE 表达式创建 SQL 命令?

How create SQL command with CASE expression in one of parameters?

我想在位于 OLE DB 命令中的 SqlCommand 中创建一个 SQL 查询,以从文件 txt 更新现有数据库,并且一个信息依赖于另一个。例如,如果我有 decision=non 我将有 somme=0 else somme=(I add five values)

当我像 somme=0somme=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);