Domanda

C'è un modo per selezionare un database da una variabile?

Declare @bob as varchar(50);
Set @bob = 'SweetDB';
GO
USE @bob
È stato utile?

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)
)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top