2015-12-10 3 views
0

Добрый день! В настоящее время у меня проблемы с обновлением моей базы данных. Я кодирую в C# .net и используя SQL-сервер.Обновление нескольких столбцов условно

Моя проблема заключается в том, что я пытаюсь обновить несколько столбцов условно. Вот мой код:

"Update Eureka Set Milestone1 = Case When Milestone1 = '" + araw.Text + "' then Milestone_status = '" + m1 + "' End, Milestone2 = When Milestone2 = '" + araw.Text + "' then Milestone_status = '" + m2 + "' End, Milestone3 = When Milestone3 = '" + araw.Text + "' Then Milestone_status = '" + m3 + "' End, Milestone4 = When Milestone4 = '" + araw.Text + "' Then Milestone_status = '" + m4 + "' End, Milestone5 = When Milestone5 = '" + araw.Text + "' Then Milestone_status = '" + m5 + "' End Where Eureka_id = '" + eid.Text + "'" 

Если Milestone1 равно текущей дате (araw.text), то статус веха будет изменен. Если нет, то milestone_status не будет изменен. Тогда то же самое относится к веху2 к веху5.

Мой код SQL-инструкция не работает. Любая помощь будет оценена по достоинству.

+1

Возможна установка SQL Injection. Используйте подготовленный оператор/привязку параметров. – lad2025

+1

спасибо за напоминание. Как только мой SQL-оператор работает, я буду использовать параметры на нем. –

ответ

1

Try;

Update Eureka 
Set Milestone_status = 
    Case 
     When Milestone1 = @araw_Text then @m1 
     when Milestone2 = @araw_Text then @m2 
     when Milestone3 = @araw_Text then @m3 
     when Milestone4 = @araw_Text then @m4 
     when Milestone5 = @araw_Text then @m5 
     else Milestone_status 
    end 
Where Eureka_id = @eid_Text 

Это обновит
Milestone_status с m1, если Milestone1 = araw.Text
Milestone_status с m2, если Milestone2 = araw.Text
Milestone_status с m3, если Milestone3 = araw.Text ....

Если условие не выполнено, то Milestone_status не будет изменен

+0

Привет, я пробовал свой код, но он все еще не работает. Я уже добавил параметры. Я думаю, что утверждение верное, но оно не выполняется. –

1

Принимая это из C# на мгновение и рассматривая его как SQL заявление в одиночку, а только глядя на milestone1 для простоты, ваш SQL должен быть что-то вроде:

UPDATE Eureka 
    SET milestone_status = 
     CASE WHEN milestone1 = @todays_date then @m1 
     ELSE milestone_status 
     END 

т.е. если milestone1 является todays date, тогда установите milestone_status на @ m1, иначе установите его для себя (т.е. не меняйте его).

SQL документов есть несколько хороших примеров по использованию синтаксиса СЛУЧАЯ, может быть стоят рассмотреть также для ясности: https://msdn.microsoft.com/en-us/library/ms181765.aspx

Надежды, что помогает

0

Вашего саза является worng синтаксиса:

Update Eureka 
Set Milestone1 = Case When Milestone1 = 'araw.Text' then Milestone_status = 'm1' End 
, Milestone2 = When Milestone2 = 'araw.Text' then Milestone_status = 'm2' End 
, Milestone3 = When Milestone3 = 'araw.Text' Then Milestone_status = 'm3' End 
, Milestone4 = When Milestone4 = 'araw.Text' Then Milestone_status = 'm4' End 
, Milestone5 = When Milestone5 = 'araw.Text' Then Milestone_status = 'm5' End 
Where Eureka_id = 'eid.Text' 

Правильный синтаксис должен быть

CASE expression 

    WHEN value_1 THEN result_1 
    WHEN value_2 THEN result_2 
    ... 
    WHEN value_n THEN result_n 

    ELSE result 

END 

В вашем случае вы можете использовать вложенный СЛУЧАЙ для проверки каждого Milestone (Milestone1, Milestone2, ..)

"Update Eureka 
set Milestone_status = case when Milestone1 = '" + araw.Text + "' then '" + m1 + "' else 
         case when Milestone2 = '" + araw.Text + "' then '" + m2 + "' else 
          case when Milestone3 = '" + araw.Text + "' then '" + m3 + "' else 
          case when Milestone4 = '" + araw.Text + "' then '" + m4 + "' else 
           case when Milestone5 = '" + araw.Text + "' then '" + m5 + "' else Milestone_status end 
           end 
          end        
          end 
         end 
Where Eureka_id = '" + eid.Text + "'" 
+0

Не могли бы вы объяснить, что именно вы изменили, чтобы другие могли воспользоваться вашим ответом. – Izzy

+0

Конечно, @lzzy, всего лишь минута – Marusyk

+0

Я пробовал свой код, но заявление все еще не работает. Я не знаю почему. Есть идеи? –

Смежные вопросы