Мне нужно преобразовать приведенный ниже код в действительный оператор SQL.
Я перепробовал несколько операторов Update, но потом понял, что могу использовать обновленное значение в более позднем операторе update. Это может привести к нескольким обновлениям, но исходный код обновляется только один раз. Я также пробовал CASE WHEN, но не могу найти способ разрешить CASE обновлять Annuitant_1_DOB или Owner_DOB.
If B1_Joint_Annuitant_Switch = 1 then
If (ISNULL(Annuitant_1_DOB) or Annuitant_1_DOB < '1/1/1901') and ISNULL(Owner_DOB) = False then
Annuitant_1_DOB = Owner_DOB
Else
Owner_DOB = Annuitant_1_DOB
End If
Else
If (ISNULL(Owner_DOB) or Owner_DOB < '1/1/1901') and ISNULL(Annuitant_1_DOB) = False then
Owner_DOB = Annuitant_1_DOB
Else
Annuitant_1_DOB = Owner_DOB
End IF
End IF
Конечный SQL должен работать так же, как оператор IF, и производить только 1 обновление данных,Спасибо
Попытка кода:
--If joint_annuitant_switch_Exhibit = 1 then
-- If (ISNULL(DOBofAnnuitant1) or DOBofAnnuitant1 < '1/1/1901') and ISNULL(DOBofOwner) = False then
Update [INS_VAL_SANDBOX].[dbo].[VA_Download]
SET Annuitant_1_DOB = Owner_DOB
Where (Annuitant_1_DOB IS NULL or Annuitant_1_DOB < '1/1/1901') and Owner_DOB IS NOT NULL and B1_Joint_Annuitant_Switch = '1'
-- Else
Update [INS_VAL_SANDBOX].[dbo].[VA_Download]
SET Owner_DOB = Annuitant_1_DOB
Where (Annuitant_1_DOB IS NOT NULL or Annuitant_1_DOB >= '1/1/1901') and Owner_DOB IS NULL and B1_Joint_Annuitant_Switch = '1'
--Else
-- If (ISNULL(DOBofOwner) or DOBofOwner < '1/1/1901') and ISNULL(DOBofAnnuitant1) = False then
Update [INS_VAL_SANDBOX].[dbo].[VA_Download]
SET Owner_DOB = Annuitant_1_DOB
Where (Owner_DOB IS NULL or Owner_DOB < '1/1/1901') and Annuitant_1_DOB IS NOT NULL and B1_Joint_Annuitant_Switch <> '1'
-- Else
Update [INS_VAL_SANDBOX].[dbo].[VA_Download]
Set Annuitant_1_DOB = Owner_DOB
Where (Owner_DOB IS NOT NULL or Owner_DOB >= '1/1/1901') and Annuitant_1_DOB IS NULL and B1_Joint_Annuitant_Switch <> '1'
И еще одна попытка (очевидно, не работает):
Select
CASE B1_Joint_Annuitant_Switch
When 1 Then
CASE WHEN (Annuitant_1_DOB IS NULL or Annuitant_1_DOB < '1/1/1901') and Owner_DOB IS NOT NULL Then Annuitant_1_DOB = Owner_DOB
ELSE Owner_DOB = Annuitant_1_DOB END
ELSE
CASE WHEN (Owner_DOB IS NULL or Owner_DOB < '1/1/1901') and Annuitant_1_DOB IS NOT NULL Then Owner_DOB = Annuitant_1_DOB
ELSE Annuitant_1_DOB = Owner_DOB END
END
From [INS_VAL_SANDBOX].[dbo].[VA_Download]