Write Better SQL in 5 Minutes – Introducción a Dynamic SQL

Cuando empecé a entrar en Structured Query Language (SQL) alrededor de 2014, recuerdo buscar ejemplos en internet. Me gustaría ver a la gente decir cosas como,» esto utiliza SQL dinámico «o» ese script es dinámico.»Aunque vi los ejemplos, realmente no entendía los componentes que lo hacían «dinámico» porque era nuevo. A medida que gané más experiencia en el campo, no solo aprendí los tres componentes que componen dynamic SQL, sino también cómo aplicarlo a varios casos de uso., Esta Breve introducción está diseñada para ayudar a los principiantes de SQL, o a cualquier otra persona, a comprender mejor los componentes de SQL dinámico.

datos para Ejemplos

Estoy utilizando los datos de operaciones del mercado de opciones disponibles en Kaggle si está interesado.

¿qué es Dynamic SQL?

aunque su aplicación puede complicarse, la definición de dynamic SQL es realmente simple:

Dynamic SQL es una instrucción SQL que se construye en tiempo de ejecución.

esto le permite construir una consulta de propósito general y construir la instrucción que necesita ejecutar sobre la marcha a través del uso de variables., Voy a deconstruir este ejemplo de SQL dinámico súper básico a continuación:

DECLARE @dynamic_sql NVARCHAR(max)select @dynamic_sql = 'select * from orderFlow'EXEC(@dynamic_sql)

lo contrario de un SQL dinámico es SQL estático que es una instrucción SQL que no cambia en tiempo de ejecución. Por ejemplo:

SELECT * FROM orderFlow

¿nota la diferencia? El SQL estático no se ejecuta usando un comando execute ni se construye usando variables.

tres pasos para escribir SQL dinámico

Si desea escribir SQL dinámico, recuerde los tres componentes:

  1. declarar Variables
    piense en usar las variables como bloques de construcción para la instrucción SQL., En el ejemplo, declaré una variable llamada dynamic_sql y le di el tipo de datos nvarchar (max). Uso max para darme la mayor cantidad de espacio para ingresar una sentencia SQL.
DECLARE @dynamic_sql NVARCHAR(max)

2. Construir cadena SQL
El hecho de que pueda introducir cualquier SQL que desee en la variable dynamic_sql es parte de lo que hace que este ejemplo SQL dinámico en primer lugar! Como quiero devolver todos los resultados de la tabla, orderFlow, establezco la variable en una instrucción select simple que se puede ejecutar sin error.

select @dynamic_sql = 'select * from orderFlow '

3., Ejecutar sentencia SQL
La sentencia que se creó en el paso dos debe ejecutarse. El comando EXEC se usa típicamente para ejecutar procedimientos almacenados, pero puede ejecutar cualquier instrucción SQL legítima almacenada como una cadena, como la almacenada en la variable dynamic_sql.

EXEC(@dynamic_sql)

Imagine trabajar con una interfaz de usuario que tiene un campo de texto que permite al usuario ingresar una instrucción SQL sin procesar y luego ejecutar esa instrucción cuando un usuario hace clic en Ejecutar. ¡He utilizado funcionalidades similares en productos de inteligencia de negocios!, Ahora que usted sabe algo de SQL dinámico, es fácil imaginar cómo podría estar trabajando detrás de las escenas.

Imaginado Interfaz de Usuario

¡Felicidades! Ahora conoce los 3 componentes de dynamic SQL!, ejemplos:

Imagine que está creando una interfaz de usuario que permite a los usuarios interactuar con los datos, pero en lugar de dejarles escribir SQL puro, les permite construir una instrucción utilizando 2 listas desplegables:

imaginary UI 2

entre bastidores, utilice un procedimiento almacenado y SQL dinámico para ejecutar la instrucción SQL construida en la interfaz de usuario:

observe que el procedimiento almacenado utiliza la entrada del usuario para rellenar las dos variables., Dado que las variables ya están definidas como se ve en la maqueta de la interfaz de usuario, el procedimiento almacenado simplemente necesita construir la cadena y ejecutar las instrucciones. Agregué un espacio para que el Usuario no tenga que recordar ingresar uno al ejecutar el procedimiento., Por ejemplo:

Ejecutar el procedimiento almacenado en Microsoft SQL Server Management Studios

Caso de uso 2:

Imagina que quieres utilizar un procedimiento almacenado para la consulta de la orderFlow tabla para un determinado símbolo de cotización:

CREATE PROCEDURE sp_example2 
@stock_symbol NVARCHAR(6) = NullAS
SELECT * FROM orderFlow where sym = @stock_symbol

Aviso de la variable se utiliza en la cláusula where en Caso de Uso 2. De esa manera, puedo ingresar un símbolo de stock y obtener resultados sin tener que usar una consulta estática una y otra vez.,

Running stored procedure in Microsoft SQL Server Management Studios

Results of sp_example2

The Downsides with Dynamic

There can be some downsides to using dynamic SQL., Puede ser propenso a la inyección SQL, lo que lo convierte en un problema de seguridad potencial. La inyección SQL suele ocurrir cuando se solicita la entrada a un usuario y, en lugar de la entrada esperada, como un nombre de usuario, el usuario ingresa una instrucción SQL que se ejecutará en la base de datos y causará que ocurran cosas inesperadas. La inyección SQL puede causar problemas graves y son una técnica común de hackers.

el rendimiento podría ser otra preocupación potencial ya que el plan de ejecución no se puede almacenar en caché. Una forma de evitar esto es usar procedimientos almacenados y el comando sp_executesql (al menos en Microsoft sql server)., Las sentencias SQL dinámicas pueden complicarse rápidamente y pueden ser difíciles de depurar, lo que las hace intimidantes para los novatos.

Pensamientos finales

aunque puede parecer complicado o tedioso al principio, SQL dinámico es una técnica poderosa porque le permite construir y ejecutar sentencias SQL en tiempo de ejecución., Dynamic SQL consta de tres componentes:

  1. Declare Variables
  2. Construct SQL String
  3. Execute SQL

Puede haber algún inconveniente como hacer que el código sea más difícil de depurar, pero la flexibilidad que brinda a los usuarios puede superar las preocupaciones, especialmente cuando se implementa adecuadamente.

si está interesado en aprender más sobre SQL o ciencia de datos, consulte mis otros tutoriales:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *