У меня есть файл .sql
, который похож на приведенный ниже
BEGIN TRY
PRINT 'Loading master data....'
BEGIN TRANSACTION
-- Some Insert scripts
-- COPY Settings from DBOne to DBTwo
PRINT 'Copy Settings Started...'
INSERT INTO DBTWO.dbo.SETTINGS
(Id,
Code,
Name)
SELECT Id,Code,Name FROM DBONE.dbo.SETTINGS
EXCEPT
SELECT Id,Code,Name FROM DBTWO.dbo.SETTINGS
PRINT 'Copy Settings completed...'
COMMIT
END TRY
BEGIN CATCH
ROLLBACK
END CATCH
Я запускаю сценарий sql с помощью следующей команды powershell
Invoke-Sqlcmd -ServerInstance ".\" -InputFile ".\Insert_Script.sql" -Verbose
Во время тестирования скрипта я заметил, что после печати текста «Copy Settings Started ...» скрипт снова запускается с начала, и я вижу, что операторы print в начале файла снова появляются, и когда элемент управления достигает INSERT INTO..EXCEPT, это не удалось с исключением тайм-аута.
Позже я обнаружил, что таблица 'DBTWO.dbo.SETTINGS' не существует, и после создания таблицы сценарий успешно выполнен без проблем.
Но вопрос в том, почему сценарий перезапустил снова с самого начала и потерпел неудачу на том же месте во время второго запуска. На этом этапе я даже проверил sp_who2, и это показало тупик, и жертва, и преступник - это один и тот же блок скрипта. Итак, со всеми этими объяснениями, вопрос остается без ответа: «Почему сценарий начался снова?»
Может кто-нибудь, пожалуйста, предоставьте более веские причины для такого поведения.