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
Foi útil?

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)
)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top