IF, ELSE - czy tak wolno?

0

Witam
Chciałbym lekko skomplikować poniższy fragment kodu:

  UPDATE tabela1
   SET
      tabela1.kolumna1 = 1,
      tabela1.kolumna2 = 2,
      tabela1.kolumna3 = 3,
      tabela1.kolumna4 = 4
   FROM tabela2
   WHERE X=1

Czy można w trakcie polecenia SET dodać warunek IF?

  UPDATE tabela1
   SET
      tabela1.kolumna1 = 1
      IF (warunek)
        BEGIN
            tabela1.kolumna2 = 2
        END
      ELSE
        BEGIN
            tabela1.kolumna3 = 3
        END
      tabela1.kolumna4 = 4
   FROM tabela2
   WHERE tabela2.X=1

Z góry dziękuję z odpowiedź.

pozdrawiam
Świerszczu

0

Który serwer? Co szkodzi Ci to uruchomić i sprawdzić? Czy działa Ci google?

W MSSQL taka składnia jest nieprawidłowa, używa się w takich przypadkach case/when/then (http://stackoverflow.com/questions/5487892/sql-server-case-when-or-then-else-end-the-or-is-not-supported).

3
swierszczu napisał(a):

Czy można w trakcie polecenia SET dodać warunek IF?

Nie, nie można używać IF w UPDATE, z tego co wiem w żadnej bazie. Ale można użyć składni CASE WHEN żeby łatwo zaprogramować taką logikę.

 UPDATE tabela1
   SET
      tabela1.kolumna1 = 1,
      tabela1.kolumna2 = CASE WHEN warunek THEN nowa_wartosc ELSE tabela1.kolumna2 END,
      tabela1.kolumna3 = CASE WHEN warunek THEN nowa_wartosc ELSE tabela1.kolumna3 END,
      tabela1.kolumna4 = 4
   FROM tabela2
   WHERE tabela2.X=1

W przypadku gdy warunek będzie fałszywy to do kolumna2 zostanie zapisana wartość z kolumna2, wartość się nie zmieni, ale uruchomią się triggery, jeżeli jakieś są. Jeżeli nie chcesz uruchamiać triggerów, to zamiast takiej konstrukcji skorzystaj z dynamic SQL.

1 użytkowników online, w tym zalogowanych: 0, gości: 1