¿Qué es SQL dinámico?

Rodrigo Ricardo Publicado el 14 noviembre, 2020 3 minutos y 39 segundos de lectura

SQL dinámico

No todas las consultas SQL las ejecuta un administrador de base de datos sentado en su escritorio. Cada vez que busca en Amazon, no hay una persona sentada en el otro extremo de Internet que ingrese su solicitud en una consulta SQL. El SQL dinámico permite que un administrador de base de datos escriba código que sea flexible y adaptable. Básicamente significa que la declaración SQL completa no se conocerá hasta que se ejecute el programa. Piense en el ejemplo de búsqueda anterior: cuando un usuario busca en Amazon, no sabemos qué tabla debemos consultar o qué buscar hasta que presione Enter. Es una herramienta poderosa porque nos permite escribir programas con sentencias SQL que no son necesariamente conocidas hasta que se ejecuta el programa. SQL dinámico se refiere a las sentencias SQL que se generan en el momento en que se ejecuta el programa. Como administrador de la base de datos, necesariamente sabe qué se ejecutará. Tomemos el siguiente ejemplo simple, donde queremos seleccionar un artista de una tabla. Pero no estamos seguros de qué tabla (tal vez sea de una tabla archivada o de la tabla de producción en vivo) y no sabemos el valor de la clave principal.

SELECT artistID, artistName FROM ???? DONDE artistID = ?? 

En este caso, necesitamos un usuario (u otro programa) para proporcionar los valores. Pero no se proporcionarán hasta que se ejecute nuestra consulta, por lo que no podemos construirla con los valores.

SQL dinámico en acción

Echemos un vistazo a un ejemplo de SQL dinámico en acción. El código está escrito para SQL Server, aunque otros sistemas de administración de bases de datos son igualmente viables. A continuación se muestra un ejemplo simple que utiliza el escenario anterior. Observe que el símbolo ‘arroba’ (@) va delante de los campos que hemos definido como dinámicos. Por ejemplo, si el usuario ingresa el nombre de la banda, el parámetro podría llamarse @bandName. También está delante de la variable cmd. Esto se debe a que estamos construyendo la declaración SELECT completa como una cadena.

DECLARE @tableName varchar (100) DECLARE @artistID int DECARE @sql varchar (4000) SET @cmd = "SELECT artistID, artistName FROM +" + @tableName + "WHERE artistID =" + @artistID   EXEC (@cmd) 

Aunque el SQL dinámico puede ser muy poderoso para crear consultas SQL flexibles, también pueden tener un impacto negativo en el rendimiento del sistema. Cuanto más tenga que procesar el sistema o el servidor, más lento funcionará. Si la consulta tiene decenas de parámetros, cada uno tiene que ser evaluado y lleva tiempo. No es tan fácil para el sistema como una consulta sencilla con valores definidos. Además, es posible que a los usuarios no les guste tener que introducir más de unos pocos parámetros. Lo mejor es presentarles algunas opciones clave; siempre puede tener subconsultas y más filtrado.

Inyección SQL

Aunque es una gran herramienta para permitir la entrada de usuarios y parámetros dinámicos, debe tener en cuenta la inyección de SQL , que es una seria amenaza para la seguridad. Una inyección es donde un pirata informático coloca datos en la aplicación que ejecutará declaraciones SQL que no desea que se ejecuten. Para garantizar que los usuarios no puedan romper el sistema, los administradores de bases de datos deben permitir solo acceso de lectura (SELECCIONAR) a los programas que se ejecutan en el servidor. En otras palabras, nunca permita que nadie más que el administrador realice actualizaciones importantes, como eliminar.

Resumen de la lección

SQL dinámico se refiere a sentencias de SQL que se generan en tiempo de ejecución. Por ejemplo, un usuario ingresaría un parámetro de búsqueda y la consulta se ejecutaría con ese valor. El SQL dinámico es útil cuando no conocemos la tabla o los elementos que estamos consultando. En esta lección, cubrimos un ejemplo de SQL dinámico en SQL Server. Sin embargo, tenga en cuenta la inyección SQL en estas situaciones: los caracteres desagradables pueden falsificar nuestros parámetros y enviar código malicioso a nuestras bases de datos. Aún así, las consultas SQL dinámicas pueden ser parte de tener un sistema de base de datos dinámico.

Explora más sobre este tema

Selecciona un tema y sigue aprendiendo...

Rodrigo Ricardo
Rodrigo Ricardo Editor y fundador