Ejecutar cadena en sqlserver

Ante todo, bueno amigos quisiera saber como ejecutar una cadena en sqlserver, ejemplo tengo una variable @mbase en un storeprocedure y quiero ejecutar el contenido de esa variable, estoy probando con exucute @mbase pero no se me para en la base que tiene la variable.

1 respuesta

Respuesta
1
Puedes usar lo siguiente:
Asumiendo que tienes esto:
Declare @cadena nvarchar(1000), @variable nvarchar(1000)
set @cadena= 'select * from productos where id_producto= '
set @cadena= @cadena+ @variable
exec(@cadena)
Mira, probé pero no ejecuta la sentencia, no se me para en la base de datos, es decir hago esto:
Declare @variable varchar(25)
set @variable = ' use tabla'
exec( @variable)
Me da comando exitoso, pero no ejecuta la sentencia.
Muchas gracias
No es que no funcione, solo que el contenido de tu variable se efecuta internamente, si cambias de base de datos con un USE y luego haces select a una tabla de tu base de datos, por más que estés en otra diferente, te dará los resultados, realiza esa prueba y espero que con eso puedas solucionar tu problema.
Si probé eso, yo también pensé que esta parada en la base aunque no se veía, hice una consulta y nada, me da error la tabla, después hago yo un use de la tabla, y ahí si me consulta, no se que estará pasando,
gracias
Puedes poner el código, ¿me dices que haces use a una tabla? Pues eso no creo que sea correcto, los use se usan con las BD, postea tu código para ver como te puedo ayudar y detallalo un poco.
Perdón me confundí, no es tabla, es base de datos este seria mi código:
begin
Declare @pcnombrebaselog Varchar(25),@pcnombrebase Varchar(25),@abredbc varchar(150)
Declare @stlog varchar(50),@stshk varchar(50)
Select @pcnombrebaselog=f.name ,@pcnombrebase=d.name from master.SYS.master_files as f
left join master.SYS.databases as d on f.database_id=d.database_id
where f.type_desc = 'LOG'
set @abredbc=N'use '+@pcnombrebase
exec(@abredbc)
print @abredbc
use TP_INDIVIDUAL
end
Gracias!
EL posible problema es que el nombre que te retorna en @pcnombrebase es un nombre del archivo log de la base de datos, ademas deberías usar algún tipo de filtro porque tu query trae varios resultados, deberías revisar cual es la bd que quieres obtener. Lo que deberías hacer para obtener el nombre de la base de datos es db_name(database_id).
Mira que yo copio lo mismo que esta en el string, lo ejecuto y se para en la base de datos lo más bien, es decir el strin esta bien, no tienes algún ejemplo de como pararme en la base de datos de esta forma.
Estoy revisando y al parecer no encuentro problema con tu código, ¿quisiera saber a que te refieres con "pararte" en una bd?
Si tu haces esto:
Use DB2
Go
exec('use BD1  select * from sys.tables')
El resultado sera las tablas de DB1.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas