Database
 sql >> Base de données >  >> RDS >> Database

Commande de trucs T-SQL

L'idée principale autour de la fonction SQL Server appelée STUFF consiste à concaténer plusieurs colonnes en une seule colonne avec plus de flexibilité que la fonction CONCAT ne le permettrait. De plus, STUFF peut être combiné avec d'autres techniques pour des effets intéressants.

Dans cet article, nous allons explorer les possibilités qu'offre la commande STUFF aux spécialistes de la base de données SQL.

La fonction T-SQL STUFF

Voyons d'abord la définition officielle de Microsoft de la fonction STUFF :

La fonction STUFF insère une chaîne dans une autre chaîne. Il supprime une longueur spécifiée de caractères dans la première chaîne à la position de départ, puis insère la deuxième chaîne dans la première chaîne à la position de départ.

Ainsi, lorsque vous utilisez la commande STUFF, vous réorganisez les données de la colonne.

Examinons quelques exemples.

Le premier est la sortie de la commande STUFF - la chaîne ABCDEFG d'origine sera bourrée avec la chaîne XXX.

SELECT STUFF('ABCDEFG',3,3,'XXX');

Nous allons analyser cette sortie pour bien comprendre la commande STUFF :

Maintenant, le troisième paramètre est augmenté aux valeurs de 4,5,6.

SELECT STUFF('ABCDEFG',3,4,'XXX');
SELECT STUFF('ABCDEFG',3,5,'XXX');
SELECT STUFF('ABCDEFG',3,6,'XXX');

Explications des appels de fonction

Le remplacement se produit au troisième caractère de la chaîne ABCDEFG d'origine à chaque exécution. La seule différence est le nombre de caractères spécifiés à supprimer via le paramètre de longueur de suppression .

Ainsi, lorsque la longueur de suppression paramètre à partir de la position de départ paramètre est plus long que la chaîne d'origine, les données sont tronquées.

Par exemple, notre chaîne d'origine comporte 7 caractères. La fonction STUFF commence à la position 3 et s'étend sur 5 caractères supplémentaires. Étant donné que 8 est supérieur à la longueur de chaîne d'origine de 7, la valeur est renvoyée sous la forme ABXXX.

Utilisation multiple de STUFF dans la même requête

Vous pouvez imbriquer la commande STUFF dans une autre commande STUFF et l'utiliser autant de fois que nécessaire. Cependant, vous devez considérer comment cela affecte les requêtes au niveau de la production. Chaque appel imbriqué s'exécute pour chaque ligne des données renvoyées.

SELECT STUFF(STUFF('ABCDEFG',1,1,'1'),7,1,'7') as StuffExample5;

Dans cet exemple, le premier caractère de la chaîne d'origine est remplacé par le caractère 1 et le dernier est remplacé par le caractère 7.

STUFF et ForXML

ForXML est une fonctionnalité de SQL Server qui peut transformer les jeux de résultats des requêtes SQL en résultats au format XML.

STUFF peut également être combiné avec d'autres fonctionnalités de SQL Server comme ForXML. Il permet de consolider les données à des fins de reporting. Prenons la structure de table suivante :

Supposons que vous vouliez un rapport avec 2 colonnes. La première colonne est USER_NAME , et le second est un rôle séparé par des virgules colonne pour chaque rôle détenu par l'utilisateur. Comment cela pourrait-il être accompli en T-SQL pur ?

Construisez la structure du tableau et insérez les données :

CREATE TABLE 
#USER
(
USER_ID INT,
USER_NAME VARCHAR(50)
)

CREATE TABLE
#USER_ROLES
(
USER_ID INT,
ROLE VARCHAR(50)
)


INSERT INTO #USER VALUES(1,'Edward')
INSERT INTO #USER VALUES(2,'John')
INSERT INTO #USER VALUES(3,'Mark')

INSERT INTO #USER_ROLES VALUES(1,'Admin')
INSERT INTO #USER_ROLES VALUES(1,'Writer')
INSERT INTO #USER_ROLES VALUES(1,'Form')
INSERT INTO #USER_ROLES VALUES(2,'Writer')
INSERT INTO #USER_ROLES VALUES(3,'Form')
INSERT INTO #USER_ROLES VALUES(3,'Writer');

Utilisez la commande STUFF :

SELECT 
   U.USER_NAME,
   STUFF((SELECT ',' + UR.ROLE 
          FROM #USER_ROLES UR
          WHERE UR.USER_ID = U.USER_ID
          FOR XML PATH('')), 1, 1, '') [ROLES]
FROM #USER U
GROUP BY U.USER_NAME, U.USER_ID
ORDER BY 1

Dans cet exemple, une requête interne est jointe à chaque USER_ID. La commande STUFF est utilisée pour remplacer la virgule initiale. En conséquence, nous avons une belle liste séparée par des virgules de chaque utilisateur avec les rôles respectifs.

Cas d'utilisation

Masquage des données

SQL Server fournit des solutions pour le masquage dynamique des données. Cependant, STUFF pourrait être utilisé pour masquer des données sensibles lorsqu'elles sont affichées. Imaginez une vue assise au-dessus d'une table contenant des champs PII client tels que SSN. La vue pourrait utiliser la commande STUFF pour tout masquer sauf les 4 derniers chiffres du SSN.

Consolidation des données

Comme démontré avec FORXML et STUFF, T-SQL offre la possibilité de consolider les données dans des colonnes uniques avec une sorte d'identifiant principal. Dans cet exemple, il s'agissait de USER_NAME. Cependant, ce type d'analyse est assez courant dans l'architecture de création de rapports de base de données.

Résumé

Ainsi, nous avons couvert les paramètres de la commande STUFF dans T-SQL et compris comment cette commande se compare à CONCAT. Nous avons présenté des exemples simples et complexes de la commande STUFF et répertorié quelques cas d'utilisation pour lesquels STUFF peut être applicable.

C'est une commande précieuse qui peut être un excellent outil à avoir sous la ceinture. Veuillez commenter avec d'autres cas d'utilisation pour la commande STUFF.