Есть ли способ выбрать базу данных из переменной?
-
06-09-2019 - |
Вопрос
Есть ли способ выбрать базу данных из переменной?
Declare @bob as varchar(50);
Set @bob = 'SweetDB';
GO
USE @bob
Решение
К сожалению, нет.
Если только вы не сможете выполнить остальную часть вашего пакета как динамический 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), поскольку первый select, выполняемый внутри execute
выполняется в SweetDB, но второй - нет.
Другие советы
declare @NewDB varchar(50)
set @NewDB = 'NewDB'
execute('use ' + @NewDB)
#Соблазны будут присутствовать во всех государственных учреждениях
вы можете создать таблицу в первом пакете, вставить / выбрать данные по мере необходимости в этом или любом следующем пакете.
вот несколько примеров синтаксиса:
CREATE TABLE #YourTableName
(
col1 int not null primary key identity(1,1)
,col2 varchar(10)
)