C'è un modo per selezionare un database da una variabile?
-
06-09-2019 - |
Domanda
C'è un modo per selezionare un database da una variabile?
Declare @bob as varchar(50);
Set @bob = 'SweetDB';
GO
USE @bob
Soluzione
Purtroppo, no.
A meno che non è possibile eseguire il resto del batch come SQL dinamico.
Utilizzando execute
per eseguire in modo dinamico SQL cambierà il contesto per la portata della dichiarazione execute
, ma non lascerà un effetto duraturo sul campo di applicazione si esegue l'istruzione execute
da.
In altre parole, in questo modo:
DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db)
non impostare il database corrente in modo permanente, ma se alterato il codice qui sopra in questo modo:
DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db + ';select * from sysobjects')
select * from sysobjects
Poi il risultato di queste due query sarà diverso (supponendo che non sei in SweetDB già), dal momento che la prima selezione, eseguita all'interno execute
è in esecuzione nella SweetDB, ma il secondo non è.
Altri suggerimenti
declare @NewDB varchar(50)
set @NewDB = 'NewDB'
execute('use ' + @NewDB)
#TempTables saranno presist attraverso GO
è possibile creare la tabella nel batch prime, inserto / dati selezionare, se necessario, in quella seguente o qualsiasi batch.
Un po 'sintassi di esempio:
CREATE TABLE #YourTableName
(
col1 int not null primary key identity(1,1)
,col2 varchar(10)
)