Filtrar y ordenar datos de BD
Cuando necesite filtrar y ordenar datos de base de datos, utilice un componente SQL/NoSQL-WHERE/ORDER. Esto le permite introducir manualmente una cláusula SQL WHERE que filtre los datos. También tiene la opción de especificar una cláusula ORDER BY si desea ordenar el conjunto de registros según cierto campo de la base de datos, en orden ascendente o descendente.
El componente SQL/NoSQL-WHERE/ORDER debe estar conectado a una tabla o campo de un componente de base de datos. También es posible conectar un componente SQL/NoSQL-WHERE/ORDER con un componente de combinación si necesita filtrar el conjunto o los registros combinados. Para más información, consulte Combinar datos de bases de datos.
Agregar un componente SQL/NoSQL-WHERE/ORDER
Para añadir un componente SQL/NoSQL-WHERE/ORDER a la asignación:
1.Vaya al menú Insertar y haga clic en SQL/NoSQL-WHERE/ORDEN. Este componente presenta esta estructura predeterminada:
2.Conecte una tabla o campo de la base de datos de origen al elemento tabla/campo del componente SQL/NoSQL-WHERE/ORDER. Encontrará la asignación de muestra FilterDatabaseRecords.mfd (imagen siguiente) en la siguiente carpeta: <Documentos>\Altova\MapForce2025\MapForceExamples\Tutorial\. En esta asignación, el componente SQL/NoSQL-WHERE/ORDER toma los datos de la tabla de origen users, filtra todos sus registros y selecciona solos aquellos en los que el apellido comienza por la letra M (ver subapartado siguiente).
3.Haga doble clic en el título del componente SQL/NoSQL-WHERE/ORDER. Alternativamente, haga clic con el botón derecho y seleccione Propiedades en el menú contextual. Esto abre el cuadro de diálogo Propiedades WHERE/ORDER de SQL/NoSQL.
4.Escriba la cláusula WHERE de SQL en el cuadro de texto superior. En nuestro ejemplo, la cláusula WHERE de SQL es la siguiente: last_name LIKE :sqlparam. Opcionalmente, escriba una cláusula ORDER BY. La imagen anterior ilustra las cláusulas WHERE y ORDER BY definidas en la asignación FilterDatabaseRecords.mfd (esta configuración se explica con más detalle a continuación). Para más ejemplos, consulte Crear cláusulas WHERE y ORDER BY.
Parámetros en componentes SQL/NoSQL-WHERE/ORDER
El componente SQL/NoSQL-WHERE/ORDER utilizado en la asignación FilterDatabaseRecords.mfd tiene la siguiente cláusula WHERE: last_name LIKE :sqlparam, donde last_name se refiere al nombre del campo de la base de datos en la tabla conectada; LIKE es un operador SQL; :sqlparam crea un parámetro llamado sqlparam en la asignación.
Los parámetros del componente SQL/NoSQL-WHERE/ORDER son opcionales. La misma cláusula WHERE se puede escribir sin parámetros de la siguiente manera: Sin parámetros, la cláusula WHERE anterior podría haberse escrito así: Last LIKE "M%". Esto recuperaría todas las personas cuyo apellido empiece por la letra M. Para que esta consulta sea aún más flexible, hemos agregado un parámetro en lugar de «M%». Esto permite suministrar cualquier otra letra de la asignación: por ejemplo, D, y recuperar así las personas cuyo apellido empiece por D con solo cambiar una constante o un parámetro de entrada de la asignación. En la asignación anterior, la letra de entrada procede de un componente de entrada llamado input. Si hace doble clic en la barra de título de este componente y abre sus propiedades, observará que se da m como valor de ejecución en tiempo de diseño (imagen siguiente).
En la asignación, el carácter comodín SQL % se suministra mediante una constante. A continuación, este carácter comodín se concatena con el valor del parámetro con ayuda de la función concat. La ventaja es que no tiene que escribir comodines SQL en la línea de comandos si esta asignación se ejecuta en otro entorno (por ejemplo, MapForce Server).
Aspecto de los componentes SQL/NoSQL-WHERE/ORDER
Los componentes SQL/NoSQL WHERE/ORDER cambian de aspecto en función de la configuración que tengan definida. De este modo, podrá ver rápidamente y directamente desde la asignación lo que hace el componente SQL/NoSQL WHERE/ORDER (ver tabla siguiente).
Se ha definido una cláusula WHERE. | |
Se ha definido una cláusula WHERE con un parámetro. El nombre del parámetro es visible bajo el elemento table/field. | |
Se ha definido una cláusula WHERE con un parámetro. Además, se ha definido una cláusula ORDER BY. La ordenación se indica mediante el icono de ordenación A-Z. |
Si coloca el cursor sobre el título del componente SQL/NoSQL WHERE/ORDER, aparecerá información rápida que muestra las cláusulas que se han definido.
Filtrado de datos en Azure CosmosDB (Enterprise Edition)
Si el nombre de un contenedor en su CosmosDB tiene caracteres especiales (por ejemplo, +, -, @, etc.) o es una palabra clave, este nombre no podrá utilizarse en las consultas y obtendrá un error de sintaxis de la base de datos. Para evitar posibles problemas, MapForce utiliza la siguiente sintaxis para las consultas en CosmosBD:
SELECT * FROM ROOT AS c WHERE c.<campo> ORDER BY c.<campo>
La palabra clave ROOT de la cláusula FROM hace referencia al contenedor actual que está consultando. Dado que la palabra clave ROOT no puede utilizarse para apuntar a campos en las cláusulas WHERE y ORDER BY, el contenedor recibe el nombre de alias c que se asigna al contenedor mediante la palabra clave AS. Asignar el nombre del alias al contenedor permite filtrar y ordenar su contenido.
Tenga en cuenta que en el cuadro de diálogo WHERE/ORDER, todas las referencias de campo deben llevar como prefijo el nombre de alias c del contenedor (ver ejemplo siguiente).
SELECT * FROM ROOT AS c WHERE c.age > 20 ORDER BY c.name