¿Hay una manera de seleccionar una base de datos de una variable?
-
06-09-2019 - |
Pregunta
¿Hay una manera de seleccionar una base de datos de una variable?
Declare @bob as varchar(50);
Set @bob = 'SweetDB';
GO
USE @bob
Solución
Por desgracia, no.
A menos que pueda ejecutar el resto de su lote como SQL dinámico.
El uso de execute
para ejecutar SQL de forma dinámica va a cambiar el contexto para el ámbito de la instrucción execute
, pero no va a dejar un efecto duradero en el ámbito ejecutar la instrucción de execute
.
En otras palabras, esto:
DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db)
No se fijará la base de datos actual de forma permanente, pero si se modifica el código de arriba como esto:
DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db + ';select * from sysobjects')
select * from sysobjects
A continuación, el resultado de esos dos consultas será diferente (suponiendo que no estás en SweetDB ya), ya que la primera selección, ejecutada dentro execute
está ejecutando en SweetDB, pero el segundo no lo es.
Otros consejos
declare @NewDB varchar(50)
set @NewDB = 'NewDB'
execute('use ' + @NewDB)
#TempTables se presist través GO
se puede crear la tabla en la primera tanda, inserte / seleccione los datos que sean necesarios en ese o en cualquier lote siguiente.
he aquí algo de sintaxis de ejemplo:
CREATE TABLE #YourTableName
(
col1 int not null primary key identity(1,1)
,col2 varchar(10)
)