Bonjour,
je dois fournir une requetes à plusieurs de mes clients pour un reporting adhoc (qui va être effectué via PowerBI et un cube SSAS Tabulaire => donc je dois avoir un modèle générique et standard qui pourra être déployer chez tous les clients), certaines tables contienne des colonnes qui sont ajoutés à la volé au niveau du paramétrage de l'ERP donc impossible de savoir les colonnes qui sont ajoutés sur chaque base de données.
je peux avoir les colonnes qui ont été ajouté à partir d'une table de paramétrage. j'ai développé donc une requête pour retourner les 10 premières colonnes de chaque table.
- j'ai pensé à mettre ma requete dans une fonction table pour retourner une variable table avec mais malheureusement les udf n'accèptent pas le sql dynamique
- les tables peuvent avoir de 0 à 69 colonnes dynamique et je vais prendre seulement les 10 premières colonnes donc un petit problème pour les tables qui contiennent un nombre de colonne < 10
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
29
30
31
32
33
34
35
36
37
38
39 CREATE FUNCTION reporting.udfInfoLibre ( @file NVARCHAR(MAX) ) RETURNS @Libre TABLE ( CT_Num VARCHAR(10), Info1 VARCHAR(69), Info2 VARCHAR(69), Info3 VARCHAR(69) --, --Info4 varchar(69), --Info5 varchar(69), --Info6 varchar(69), --Info7 varchar(69), --Info8 varchar(69), --Info9 varchar(69), --Info10 varchar(69) ) AS BEGIN DECLARE @col NVARCHAR(MAX); DECLARE @sql NVARCHAR(MAX); SELECT @col = COALESCE(@col + ',[' + CAST(CB_Name AS VARCHAR) + ']', '[' + CAST(CB_Name AS VARCHAR) + ']') + ' as ' + t.alias FROM ( SELECT CB_Name AS CB_Name, 'Info' + CAST(ROW_NUMBER() OVER( ORDER BY CB_Pos) AS VARCHAR(3)) AS alias FROM cbSysLibre WHERE CB_File = @file AND CB_Pos <= 10 ) AS t; SET @sql = ' SELECT CT_Num ,' + @col + ' FROM F_COMPTET WHERE CT_Type = 0'; EXEC sp_executesql @sql; RETURN; END;
Partager