2 части сохраненного процесса успешны при частичном запуске, безуспешны при одновременном запуске - PullRequest
0 голосов
/ 16 января 2011

См. Код ниже. Когда я запускаю части № 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

1 Ответ

1 голос
/ 16 января 2011

Удалить GO после первого оператора обновления.

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

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