К сожалению, нет.
Если вы не можете выполнить оставшуюся часть пакета как динамический SQL.
Использование execute
для динамического выполнения SQL изменит контекст для области действия оператора execute
, но не окажет длительного влияния на область, из которой вы выполняете оператор execute
.
Другими словами, это:
DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db)
Не будет устанавливать текущую базу данных постоянно, но если вы изменили вышеуказанный код следующим образом:
DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db + ';select * from sysobjects')
select * from sysobjects
Тогда результат этих двух запросов будет разным (при условии, что вы уже не в SweetDB), поскольку первый выбор, выполненный внутри execute
, выполняется в SweetDB, а второй - нет.