首页 > 解决方案 > 如何在参数之一中使用 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 = ?)

标签: sqlsql-serversql-server-2008case

解决方案


您看到想要命名您的参数,您可以在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);

推荐阅读