Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenas tardes
Quisiera cargar todas las tablas de una base de datos que empiecen por VENTAS, es de un programa antiguo que guarda las ventas en tablas por meses, ej:
VENTAS_01
VENTAS_02
....
....
VENTAS_12
VENTAS_13
VENTAS_XX
Por lo que me gustaría crear un script que cargara todas las tablas que empezaran por VENTAS* (no se cuantas tablas)
Con archivos si que se hacerlo, pero no con tablas de una base de datos.
Solo tienes que asegurarte que en la ruta de la extracción o lectura e las tablas lleve el prefijo que tienen todas las tablas, despues pones un asterisco. ejemplo:
FROM
[..\..\..\Extracción\ Ventas_201*.xlxs]
(txt, codepage is 1252, embedded labels, delimiter is ';', msq);
Aqui va a cargar todas ls tablas de la carpeta Extracción que empiecen con Ventas_201.
Es eso lo que necesitas?
Hola
El problema es que no son ficheros dentro de un directorio, son tablas de una base de datos, y para eso no he encontrado ejemplos.
Para cargar ficheros, se utiliza el For each.... y va cargando todos, pero en tablas no lo he conseguido.
Muchas gracias
Pues depende de tu motor de base de datos. Con SQL Server, por ejemplo, el código podría ser como el siguiente, para obtener todos los nombres de tablas que empiecen por la cadena "VENTAS",
SELECT * FROM sys.tables WHERE name LIKE 'VENTAS%'
De esta forma, puedes cargar todos los nombres de tabla en una variable, cada valor separado por comas y entre comillas simples de forma que lo puedas usar en un bucle FOR EACH
// Chr(39) = '
// Chr(44) = ,
// La función Concat() nos devolverá una cadena tipo "'VENTAS1','VENTAS2','VENTAS3',..."
Tablas:
LOAD Chr(39) & Concat(DISTINCT name, Chr(39) & Chr(44) & Chr(39)) & Chr(39) AS NombresTablas;
SQL SELECT * FROM sys.tables WHERE name LIKE 'VENTAS%';
// Almacenamos los nombres de tablas separados por comas en un variable
LET vNombresTablas = FieldValue('NombresTablas', 1);
// no necesitamos más la tabla (los datos están en la variable), así que la borramos
DROP TABLE Tablas;
// Cargamos cada tabla
FOR EACH vTabla in $(vNombresTablas)
Ventas:
LOAD *;
SQL SELECT * FROM '$(vTabla)';
NEXT
Lo escribo de memoria, así que es posible que me haya dejado algún paréntesis o comilla sin cerrar.
Si tu caso no es SQL Server, el funcionamiento será idéntico en todo excepto en la forma de obtener el nombre de las tablas creadas por el usuario. Todos los sistemas gestores de bases de datos tienen algún tipo de diccionario de datos o "metatablas" donde almacenan esta información.
Un saludo,
BI Consultant
Muchas gracias Miguel
Voy a ver si lo puedo hacer como indicas.
Un Saludo