Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Cómo generar variable table

Estas en el tema de Cómo generar variable table en el foro de SQL Server en Foros del Web. Hola. Tengo muchas bases de datos, una para cada sociedad. Cada una de estas bases de datos tiene exactamente las mismas tablas. Estoy creando un ...
  #1 (permalink)  
Antiguo 11/04/2007, 01:33
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 19 años, 9 meses
Puntos: 12
Cómo generar variable table

Hola.
Tengo muchas bases de datos, una para cada sociedad. Cada una de estas bases de datos tiene exactamente las mismas tablas.
Estoy creando un procedimiento almacenado para actualizar fechas en una tabla de cada base de datos.
Tengo una tabla de sociedades que la recorro mediante un cursor. Lo que necesito es crear una variable (si es que es posible) para actualizar todas las bases de datos con el cursor.
Algo como @tabla = @sociedad.[dbo].[fechas]
para poder hacer:
UPDATE @tabla SET ...
Obviamente esto no funciona, así que mi pregunta es cómo generar esta variable.
Siempre me devuelve un mensaje en el que me indica que debo declarar la variable @tabla que ya he probado de declarar de mil maneras.
Gracias y saludos.
  #2 (permalink)  
Antiguo 11/04/2007, 08:44
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 6 meses
Puntos: 8
Re: Cómo generar variable table

Que tal Mahalo.

Lo que entendí que quieres hacer es, actualizar una tabla en diferentes base de datos ( muchas ), la tabla se llama igual en todas las base de datos, sí es esto, entonces quizá puedas hacerlo de la siguiente manera:

Código:
DECLARE @strNameDB varchar(30)
DECLARE @strNameTable varchar(100)
DECLARE @strSQL varchar(500)

SET @strNameDB ='myDataBase1'
SET @strNameTable = @strNameDB  + '.dbo.myTable'
SET @strSQL = ' UPDATE ' +  strNameTable  +  ' SET Fechas = ....  .. '
EXECUTE ( @strSQL  )
Quizá la variable @strSQL se puede obtener en un solo paso, lo hice así para ser un poco más descriptivo.

El usuario que ejecute esa instrucción debe de tener los permisos correspondientes en cada base de datos.

Y estoy suponiendo que el owner de la tabla en cada base de datos es dbo.

Ahora lo que tienes que hacer es un ciclo donde vayas variando la variable @strNameDB, valgase la redundancia.

Saludos y suerte!!
  #3 (permalink)  
Antiguo 11/04/2007, 09:21
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 19 años, 9 meses
Puntos: 12
Re: Cómo generar variable table

Ok, me comprendiste a la perfección. Ya se me acaba la jornada laboral, pero seguro que mañana por la mañana lo habré probado.

Mil gracias.
  #4 (permalink)  
Antiguo 12/04/2007, 09:14
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 19 años, 9 meses
Puntos: 12
Re: Cómo generar variable table

La solución de Daniel es buena. Tengo problemas en la conversión de datos, pero ya profundizaré.

Ahí va otra. ¿Se puede crear un cursor para una consulta creada dinámicamente?
Código:
DECLARE @SQL varchar(200)
SELECT @SQL = 'SELECT * FROM '+@tabla
Saludos!
  #5 (permalink)  
Antiguo 12/04/2007, 09:34
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 6 meses
Puntos: 8
Re: Cómo generar variable table

Que tal Mahalo.

Sí, se puede, aunque todo tu código quedaría dentro de cadenas de SQL, similar a lo que te propuse anteriormente, sería algo com lo siguiente:

Código:
DECLARE @strSQL varchar(800)
DECLARE @strmyTable varhcar(10) 

SET @strmyTable = 'mytbale'

SET @strSQL = 'DECLARE myCursor CURSOR FOR ' +
                ' SELECT myField1, myFiled2 FROM' + @strmyTable  + ' WHERE ...'

SET @strSQL = @strSQL  ' OPEN myCursor'
....
--- y así seguir agregando el script en una cadena.
....
EXECUTE (@strSQL)
Saludos y suerte!!
  #6 (permalink)  
Antiguo 12/04/2007, 09:53
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 19 años, 9 meses
Puntos: 12
Re: Cómo generar variable table

Gracias por responder tan rápido.

La solución es un poco engorrosa, la verdad. No sé si acabaré aplicándola. Me resulta extraño que no haya una forma más cómoda y ágil de crear consultas dinámicas en lo que a las bases de datos y tablas de refiere.

Saludos!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:49.