См. Код ниже.
Когда я запускаю части № 1 и № 2 по отдельности, они работают как запланировано: я получаю ожидаемое значение «Y» в поле [InsertFlag].
Но когда я запускаю их вместе, выполняя весь sp, я не получаю ожидаемого значения 'Y'.
Мое лучшее предположение заключается в том, что независимо от порядка, в котором я размещаю эти два оператора, # 2 выполняется первым. Это заполняет [SCD_Type2_EndDate], и когда # 1 проверяет это поле на NULL, происходит сбой и, следовательно, не обновляется поле [InsertFlag].
Если мои предположения верны, мне нужно найти способ заставить эти два оператора работать по порядку. Я попытался добавить 'GO' после 1-го оператора, но получил следующую ошибку:
Сообщение 102, Уровень 15, Состояние 1, Процедура
etl_Update_SetExpiryDate_adName, Line
19 Неверный синтаксис рядом с ';'. Сообщение 102,
Уровень 15, состояние 1, строка 23 неверна
синтаксис около 'END'.
Итак, как я могу это исправить?
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE etl_Update_SetExpiryDate_adName
AS
BEGIN
SET NOCOUNT ON;
--1.
UPDATE
amlrr.wtName
SET
InsertFlag = 'Y'
FROM
amlrr.wtName wtN
INNER JOIN amlrr.adName adN
ON wtN.StageID = adN.StageID
WHERE
adN.SCD_Type2_EndDate IS NULL
AND
wtN.FullName <> adN.FullName
GO
--2.
UPDATE
amlrr.adName
SET
SCD_Type2_EndDate = getdate()
FROM
amlrr.adName adN
INNER JOIN amlrr.wtName wtN
ON adN.StageID = wtN.StageID
WHERE
adN.SCD_Type2_EndDate IS NULL
AND
adN.FullName <> wtN.FullName
END
GO