Pregunta

¿Hay una manera de seleccionar una base de datos de una variable?

Declare @bob as varchar(50);
Set @bob = 'SweetDB';
GO
USE @bob
¿Fue útil?

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)
)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top