Как создать команду SQL с выражением CASE в одном из параметров? - PullRequest
0 голосов
/ 21 сентября 2019

Я хочу создать запрос SQL в SqlCommand, расположенном в команде OLE DB, чтобы обновить существующую базу данных из файла 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 = ?)

1 Ответ

1 голос
/ 21 сентября 2019

Вы хотите указать свои параметры, что можно сделать в предложении 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...