Bonjour, je cherche à écrire une requête me remontant certaines données.
Pour garder cela dans les règles de l'art j'aimerai éviter d'utiliser un curseur, et peut-être du SQL dynamique (ça semble plus compliqué...)
Le besoin
J'ai besoin de compter les nombres de lignes présentes dans des tables selon la valeur d'un filtre disponible dans une autre du même schéma au nom toujours identique...
Je précise que je suis dans un contexte décisionnel, que les tables en question sont des tables de faits que je vide tous les jours et que chacun des tables de fait (ou presque) est dans un schéma différent..
Toutes les tables de faits ont une colonne DateId et chacun des schéma à une table RefDateProcess avec une colonne DateId.
Pour chacune des tables de fait je dois faire la jointure avec la table RefDateProcess correspondante sur cette date et compter le nombre de lignes.
Le tout est ensuite d'insérer ces valeurs de comptage dans une table de log.
Le tout est alors "d'intégrer" la seconde requête dans la première
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 CREATE SCHEMA [sc1] AUTHORIZATION [dbo] CREATE SCHEMA [sc2] AUTHORIZATION [dbo] GO CREATE TABLE sc1.Ft (DateId INT, Code VARCHAR(MAX)) CREATE TABLE sc2.Ft (DateId INT, Code VARCHAR(MAX)) CREATE TABLE sc1.RefDateProcess (DateId INT) CREATE TABLE sc2.RefDateProcess (DateId INT) GO -- Ma liste de tables select sc.name, tb.name from sys.tables tb JOIN sys.schemas sc ON sc.schema_id = tb.schema_id where tb.name like 'Ft%' -- Le comptage pour une table select COUNT(ft.DateId) from sc1.Ft ft JOIN sc1.RefDateProcess ref ON ref.DateId = ft.DateId
Sachant que les tables de faits peuvent ne contenir aucune ligne bien sûr (ce que je chercher à repérer).
Tout cela sera ensuite intégré à un report qui contiendra une date, envoyée en paramètre à une procédure qui nettoies la table de logs sur la date de la RefDateProcess puis recompte le nombre de lignes.
Partager