SQL Advanced Knowledge V2-SQL dynamique

Colonne SQL

Résumé des connaissances de base de la base de données SQL

Résumé des connaissances avancées de la base de données SQL

Avant d'introduire le SQL dynamique, voyons ce qu'est le SQL statique

SQL statique

Les instructions SQL statiques sont généralement utilisées dans les applications Embedded SQL. Avant l'exécution du programme, les instructions SQL doivent être déterminées. Par exemple, les noms de colonne et de table impliqués dans les instructions SQL doivent exister. La compilation des instructions SQL statiques est effectuée avant l'exécution de l'application et les résultats de la compilation sont stockés dans la base de données. Ensuite, lorsque le programme est en cours d'exécution, la base de données exécutera directement l'instruction SQL compilée, réduisant ainsi la surcharge d'exécution.

SQL dynamique

Les instructions SQL dynamiques sont compilées et exécutées lorsque l'application est en cours d'exécution. Par exemple, lorsque vous utilisez l'outil interactif CLP de DB2 pour accéder à la base de données, l'instruction SQL saisie par l'utilisateur est incertaine, de sorte que l'instruction SQL ne peut être compilée dynamiquement que de manière dynamique. Il existe de nombreuses applications de SQL dynamique. Les applications CLI et JDBC courantes utilisent le SQL dynamique.

Fonction SQL dynamique

  • Automatisez les tâches de gestion. Par exemple: pour chaque base de données de l'instance de base de données, interrogez ses métadonnées et exécutez l'instruction BACKUP DATABASE pour celle-ci.

  • Améliorez les performances de tâches spécifiques. Par exemple, créez des requêtes spécifiques paramétrées pour réutiliser les plans d'exécution précédemment mis en cache.

  • Sur la base de la requête de données réelle, l'élément de code est construit. Par exemple, lorsque l'on ne sait pas à l'avance quels éléments doivent apparaître dans la clause IN de l'opérateur PIVOT, une requête PIVOT est construite dynamiquement.

Méthode d'exécution SQL dynamique

Utilisez la commande EXEC (abréviation de EXECUTE) et utilisez SP_EXECUTERSQL.

Exécution de la commande EXEC

grammaire

EXECUTE (instruction SQL)

Remarque: La commande EXECUTE a deux objectifs, l'un est d'exécuter une procédure stockée et l'autre est d'exécuter du SQL dynamique


Exemple sans paramètres

Une chaîne est stockée dans la variable @SQL, la chaîne contient une instruction de requête, puis le code batch stocké dans la variable est appelé avec EXEC, nous pouvons écrire du SQL comme ceci:


EXEC ('SELECT * FROM Customers')

Les résultats sont les suivants:

SQL Advanced Knowledge V2-SQL dynamique

C'est la même chose que nous exécutons directement SELECT * FROM Clients.

Exemple avec paramètres

Toujours l'exemple ci-dessus, changeons le libellé

DECLARE @SQL AS VARCHAR(100);
DECLARE @Column AS VARCHAR(20);
SET @Column = '姓名'
SET @SQL = 'SELECT ' + @Column + '  FROM Customers';
EXEC (@SQL)

Les résultats sont les suivants:

SQL Advanced Knowledge V2-SQL dynamique

SP_EXECUTERSQL exécution
syntaxe

EXEC SP_EXECUTERSQL paramètre 1, paramètre 2, paramètre 3

Remarque: SP_EXECUTERSQL est une autre façon d'exécuter du SQL dynamique après EXEC. L'utilisation de cette procédure stockée est plus sûre et flexible car elle prend en charge les paramètres d'entrée et de sortie. Notez que, contrairement à EXEC, SP_EXECUTERSQL ne prend en charge que les codes batch qui utilisent des chaînes Unicode comme entrée.

Exemple

Construit un code de lot pour interroger la table Clients, en utilisant un paramètre d'entrée @CusID dans ses conditions de filtre de requête


DECLARE @SQL AS NVARCHAR(100);
SET @SQL=N'SELECT * FROM Customers
WHERE 客户ID=@CusID;';

EXEC  SP_EXECUTESQL
    @STMT=@SQL,
    @PARMS=N'@CusID AS INT',
    @CusID=1;

Les résultats sont les suivants:

SQL Advanced Knowledge V2-SQL dynamique

Le code spécifie la valeur du paramètre d'entrée comme 1, mais même si le code est exécuté avec une valeur différente, la chaîne de code est toujours la même. Cela peut augmenter les chances de réutiliser des plans d'exécution précédemment mis en cache.

annotation

Le SQL dynamique peut être moins exposé dans le travail quotidien, mais sa fonction est très puissante. Il peut être directement imbriqué dans le code pour manipuler les données, mais il est également sujet aux erreurs, en particulier lorsque vous faites très attention lorsque vous épissez des commandes. Voici juste pour vous donner une brève introduction à son utilisation, il nécessite une utilisation approfondie et beaucoup de recherche.

Je suppose que tu aimes

Origine blog.51cto.com/15057820/2655104
conseillé
Classement