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 40 41 42 43 44
| CREATE FUNCTION [dbo].[MyFunction](@Companies varchar(500))
RETURNS @ret TABLE
(
i int,
j int
)
AS
BEGIN
DECLARE @qry as varchar(max)
DECLARE @Company as varchar(100)
DECLARE c1 CURSOR FOR
SELECT Fld FROM dbo.ArrayToTable(@Companies, ',')
-- Dans la variable @companies il y a les sociétés que le l'exécuteur de la fonction veut conserver séparé par des virgules.
-- ex : Si l'executeur veut SOC1 et SOC3, @Companie = 'SOC1,SOC3'
-- Dans notre exemple il y a donc 6 cas de figures 'SOC1', 'SOC2', 'SOC3', 'SOC1,SOC2', 'SOC1,SOC3', 'SOC2,SOC3' et 'SOC1,SOC2,SOC3'
-- La fonction ArrayToTable renvoit une table avec chacune des sociétés comme ligne dans le champ Fld
OPEN c1
FETCH NEXT FROM c1 INTO @Company
SET @qry = 'INSERT INTO @ret
SELECT i, j FROM ' + @Company + '$T1 '
FETCH NEXT FROM c1 INTO @Company
WHILE @@FETCH_STATUS = 0
BEGIN
SET @qry = @qry + '
UNION ALL
SELECT i, j FROM ' + @Company + '$T1 '
END
CLOSE c1
DEALLOCATE c1
Execute SP_executesql @Qry
RETURN
END |
Partager