Bonjour,

Je suis debutant en SQL donc soyez indulgent svp . Voila mon probleme.

J ai une base de donnee tres simple, juste une table TABLE qui contient : CellID as int, ReturnPeriod as int, Duration as int and TotalDepth as float.

Quand l utilisateur fournit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
GetProfile(@CellID, @Duration, @ReturnPeriod, @Timestep)
(Timestep as float)

Grace aux parametres @CellID, @Duration, @ReturnPeriod, j'identifie quelle TotalDepth est associée avec le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
USE [Ireland - Pluvial Data]
GO
ALTER PROCEDURE [dbo].[GetProfile]
@CellID int,
@ReturnPeriod int,
@Duration int,
@Timestep float
AS
BEGIN
SELECT CellsRainfall.TotalDepth
From CellsRainfall
Where CellsRainfall.CellID=@CellID AND CellsRainfall.ReturnPeriod=@ReturnPeriod AND CellsRainfall.Duration=@Duration 
END
Mais mon probleme est que je ne voudrais pas directement retourner le TotalDepth associé, mais l utiliser (ainsi que @Duration et @Timestep) pour calculer un vecteur de valeurs.

Par exemple, imaginons que ma fonction soit que je veuille retourner a l utilisateur un vecteur contenant @Duration valeurs qui sont TotalDepth*index*@Timestep. (Avec index variant de 1 a @Duration), donc un truc comme :

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
ALTER FUNCTION [dbo].[TestTable] 
(
	@TotalDepth float,
	@Duration int,
	@Timestep float
)
RETURNS 
@IDS TABLE 
(
	ID int
) 
AS
BEGIN
	DECLARE 
		@Index1 int,
		@Resultat float;  
	SET @Index1=1
	WHILE @Index1<=@Duration
	BEGIN
		SET @Resultat=@TotalDepth*@Index1*@Timestep
		INSERT INTO @IDS(ID)
		VALUES(@Resultat) 
		SET @Index1=@Index1+1
	END
 
	RETURN 
END
Mon probleme est que je ne sais pas comment inserer dans ma stored procedure, le fait que je doive appeler ma fonction TestTable avec la TotalDepth identifiée dans ma table et les parametres @Duration et @Timestep.

En fait, j aurais crus qu un truc comme le code suivant marche, mais non ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
SELECT dbo.TableTest(CellsRainfall.TotalDepth,@Duration,@Timestep)
From CellsRainfall
Where CellsRainfall.CellID=@CellID AND CellsRainfall.ReturnPeriod=@ReturnPeriod AND CellsRainfall.Duration=@Duration 
END
Merci

Slumpy.