quand j’ai commencé à entrer dans le langage de requête structuré (SQL) vers 2014, je me souviens avoir parcouru internet pour trouver des exemples. Je verrais les gens dire des choses comme: « cela utilise du SQL dynamique” ou « ce script est dynamique.” Bien que j’ai vu les exemples, Je ne comprenais pas vraiment les composants qui le rendaient « dynamique” parce que j’étais nouveau. Au fur et à mesure que j’ai acquis plus d’expérience dans le domaine, j’ai non seulement appris les trois composants qui composent dynamic SQL, mais aussi comment l’appliquer à divers cas d’utilisation., Cette courte introduction est conçue pour aider les débutants en SQL, ou quiconque, à mieux comprendre les composants de dynamic SQL.
données pour des exemples
j’utilise les données sur les transactions du marché des options disponibles sur Kaggle si vous êtes intéressé.
QU’est-ce que le SQL dynamique?
bien que son application puisse devenir compliquée, la définition de dynamic SQL est en fait simple:
Dynamic SQL est une instruction SQL qui se construit au moment de l’exécution.
cela vous permet de construire une requête à usage général et de construire l’instruction que vous devez exécuter à la volée en utilisant des variables., Je vais déconstruire cet exemple de SQL dynamique super basique ci-dessous:
DECLARE @dynamic_sql NVARCHAR(max)select @dynamic_sql = 'select * from orderFlow'EXEC(@dynamic_sql)
le contraire d’un SQL dynamique est le SQL statique qui est une instruction SQL qui ne change pas au moment de l’exécution. Par exemple:
SELECT * FROM orderFlow
Notez la différence? Le SQL statique n’est ni exécuté à l’aide d’une commande execute ni construit à l’aide de variables.
trois étapes pour écrire du SQL dynamique
Si vous voulez écrire du SQL dynamique, rappelez-vous les trois composants:
- déclarer les Variables
pensez à utiliser les variables comme blocs de construction pour L’instruction SQL., Dans l’exemple, j’ai déclaré une variable appelée dynamic_sql et lui ai donné le type de données nvarchar(max). J’utilise max pour me donner le plus d’espace pour entrer une instruction SQL.
DECLARE @dynamic_sql NVARCHAR(max)
2. Construire une chaîne SQL
Le fait que vous pouvez entrer N’importe quel SQL que vous voulez dans la variable dynamic_sql fait partie de ce qui rend cet exemple SQL dynamique en premier lieu! Puisque je veux retourner tous les résultats de la table, orderFlow, j’ai défini la variable sur une simple instruction select qui peut être exécutée sans erreur.
select @dynamic_sql = 'select * from orderFlow '
3., Execute SQL statement
l’instruction qui a été construite à l’étape deux doit être exécutée. La commande EXEC est généralement utilisée pour exécuter des procédures stockées, mais peut exécuter n’importe quelle instruction SQL légitime stockée sous forme de chaîne, comme celle stockée dans la variable dynamic_sql.
EXEC(@dynamic_sql)
imaginez travailler avec une interface utilisateur qui a un champ de texte qui permet à un utilisateur d’entrer une instruction SQL brute, puis exécute cette instruction lorsqu’un utilisateur clique sur Exécuter. J’ai utilisé des fonctionnalités similaires dans les produits de Business Intelligence!, Maintenant que vous connaissez du SQL dynamique, il est facile d’imaginer comment cela pourrait fonctionner dans les coulisses.
Félicitations! Vous connaissez maintenant les 3 composants de dynamic SQL!, exemples:
Imaginez que vous êtes la création d’une interface utilisateur qui permet aux utilisateurs d’interagir avec les données, mais au lieu de les laisser écrire pur SQL, vous leur permettez de construire un énoncé à l’aide de 2 listes déroulantes:
en coulisses, l’utilisation d’une procédure stockée et dynamique SQL à exécuter l’instruction SQL construit dans l’INTERFACE utilisateur:
Notez que la procédure stockée utilise l’entrée de l’utilisateur pour remplir les deux variables., Étant donné que les variables sont déjà définies comme on le voit dans la maquette de l’interface utilisateur, la procédure stockée doit simplement construire la chaîne et exécuter les instructions. J’ai ajouté un espace afin que l’utilisateur n’ait pas besoin de se rappeler d’en entrer un lors de l’exécution de la procédure., Par exemple:
Cas d’utilisation 2:
Imaginez que vous souhaitez utiliser une procédure stockée à la requête de la orderFlow table pour un symbole:
CREATE PROCEDURE sp_example2
@stock_symbol NVARCHAR(6) = NullAS
SELECT * FROM orderFlow where sym = @stock_symbolNotez que la variable est utilisée dans la clause where en Cas d’Utilisation 2. De cette façon, je peux entrer un symbole boursier et obtenir des résultats sans avoir à utiliser une requête statique encore et encore.,
The Downsides with Dynamic
There can be some downsides to using dynamic SQL., Il peut être sujet à L’injection SQL, ce qui en fait un problème de sécurité potentiel. L’injection SQL se produit généralement lorsque vous demandez une entrée à un utilisateur, et au lieu d’une entrée attendue comme un nom d’utilisateur, l’utilisateur entre une instruction SQL qui s’exécutera sur la base de données provoquant des événements inattendus. L’injection SQL peut causer de graves problèmes et est une technique de piratage informatique courante.
les performances pourraient être un autre problème potentiel car le plan d’exécution ne peut pas être mis en cache. Un moyen de contourner ce problème consiste à utiliser des procédures stockées et la commande sp_executesql (au moins dans Microsoft sql server)., Les instructions SQL dynamiques peuvent devenir compliquées rapidement et peuvent être difficiles à déboguer, ce qui les rend intimidantes pour les débutants.
Final Thoughts
bien que cela puisse sembler délicat ou fastidieux au premier abord, dynamic SQL est une technique puissante car elle vous permet de construire et d’exécuter des instructions SQL lors de l’exécution., Dynamic SQL se compose de trois composants:
- Declare Variables
- Construct SQL String
- Execute SQL
il peut y avoir des inconvénients comme rendre le code plus difficile à déboguer, mais la flexibilité qu’il offre aux utilisateurs peut l’emporter sur les préoccupations, en particulier lorsqu’il est implémenté de manière appropriée.
Si vous souhaitez en savoir plus sur SQL ou la science des données, veuillez consulter mes autres tutoriels: