Existe uma maneira para selecionar um banco de dados de uma variável?
-
06-09-2019 - |
Pergunta
Existe uma maneira para selecionar um banco de dados de uma variável?
Declare @bob as varchar(50);
Set @bob = 'SweetDB';
GO
USE @bob
Solução
Infelizmente, não.
A menos que você pode executar o resto do seu lote como SQL dinâmico.
Usando execute
para dinamicamente executar SQL vai mudar o contexto do escopo da instrução execute
, mas não vai deixar um efeito duradouro sobre o alcance que você executar a instrução execute
de.
Em outras palavras, o seguinte:
DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db)
Não vai definir o banco de dados atual permanentemente, mas se você alterou o código acima assim:
DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db + ';select * from sysobjects')
select * from sysobjects
Em seguida, o resultado dessas duas consultas será diferente (supondo que você não está em SweetDB já), desde a primeira escolha, executado dentro execute
está executando em SweetDB, mas o segundo não é.
Outras dicas
declare @NewDB varchar(50)
set @NewDB = 'NewDB'
execute('use ' + @NewDB)
#TempTables vai presist através GOs
Você pode criar a tabela no lote Primeiro, insira / dados selecionados conforme necessário nessa ou em qualquer seguinte lote.
aqui é alguma sintaxe de exemplo:
CREATE TABLE #YourTableName
(
col1 int not null primary key identity(1,1)
,col2 varchar(10)
)