Есть ли способ выбрать базу данных из переменной? - PullRequest
4 голосов
/ 02 июня 2009

Есть ли способ выбрать базу данных из переменной?

Declare @bob as varchar(50);
Set @bob = 'SweetDB';
GO
USE @bob

Ответы [ 3 ]

10 голосов
/ 02 июня 2009

К сожалению, нет.

Если вы не можете выполнить оставшуюся часть пакета как динамический 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, а второй - нет.

0 голосов
/ 02 июня 2009

# TempTables будет действовать во всех GOs

Вы можете создать таблицу в первом пакете, вставлять / выбирать данные по мере необходимости в этом или любом следующем пакете.

Вот пример синтаксиса:

CREATE TABLE #YourTableName
(
     col1   int         not null   primary key   identity(1,1)
    ,col2   varchar(10)
)
0 голосов
/ 02 июня 2009
declare @NewDB varchar(50)
set @NewDB = 'NewDB'
execute('use ' + @NewDB)
...