У меня есть сохраненный процесс со структурой, подобной следующей
BEGIN TRY
BEGIN TRANSACTION
IF EXISTS (SELECT Something FROM Somewhere WHERE Something = '123abc')
GOTO FINISHED
IF NOT EXISTS (SELECT Something FROM Somewhere WHERE Something = 'abc123')
SET @ReturnCode = 2
FINISHED:
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
Предположим, что GOTO не используется. Я получаю следующие две ошибки
Line 183
Incorrect syntax near 'F'.
Line 183
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 1, current count = 2.
Если я оберну последние IF
BEGIN
и END
, сохраненный процесс будет работать как обычно. Это нормально и заботится о моих проблемах с синтаксисом.
Проблема в том, что у меня есть точный сохраненный процесс на двух разных серверах. Каждый всегда получит ошибки, и он никогда не получит ошибок с кодом, как указано выше.
Единственное, о чем я могу думать, это то, что в SQL могут быть некоторые настройки, которые включены на одном сервере, но не на другом. У кого-нибудь когда-нибудь было что-то подобное раньше?
Подробнее: проблемный сервер устарел, пакеты обновления не установлены, а на втором сервере установлен пакет обновления 2 (SP2). В настоящее время в процессе обновления. Позже обновлю результаты.