J'ai un pb pourquoi je suis obligé de rentrer tous les paramètres de ma fonction?
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
40
41
42
43
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'dbo.DWH_GET_MAXDATE') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
	DROP FUNCTION dbo.DWH_GET_MAXDATE
GO
 
CREATE FUNCTION DWH_GET_MAXDATE(
	@d1 DATETIME = null, 
	@d2 DATETIME = null, 
	@d3 DATETIME = null, 
	@d4 DATETIME = null,
	@d5 DATETIME = null, 
	@d6 DATETIME = null, 
	@d7 DATETIME = null, 
	@d8 DATETIME = null,
	@d9 DATETIME = null, 
	@d10 DATETIME  = null
)
	RETURNS DATETIME
AS
-- Fonction qui retourne la date maximale parmi les 10 passées en paramètre
BEGIN
	DECLARE @max DATETIME;
 
	WITH 
		TabDates (dates) 
	AS (
		SELECT @d1 UNION ALL 
		SELECT @d2 UNION ALL 
		SELECT @d3 UNION ALL 
		SELECT @d4 UNION ALL 
		SELECT @d5 UNION ALL 
		SELECT @d6 UNION ALL 
		SELECT @d7 UNION ALL 
		SELECT @d8 UNION ALL 
		SELECT @d9 UNION ALL 
		SELECT @d10 UNION ALL
		SELECT '19500101'
	)
	SELECT @max = MAX(dates)
	FROM TabDates;
 
	RETURN @max;
END
GO
Lorsque je demande
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT [dbo].[DWH_GET_MAXDATE] ('20011231', '20000101' )
j'ai un message :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Msg 313, Level 16, State 2, Line 1
An insufficient number of arguments were supplied for the procedure or function dbo.DWH_GET_MAXDATE.
Comment ça se fait? Pourquoi suis-je obligé de donner les 10 paramètres? A quoi servent les valeurs par défaut? Je rappelle juste la définition:
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
Scalar Functions
CREATE FUNCTION [ schema_name. ] function_name 
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type 
    [ = default ] } 
    [ ,...n ]
  ]
)
RETURNS return_data_type
    [ WITH <function_option> [ ,...n ] ]
    [ AS ]
    BEGIN 
                function_body 
        RETURN scalar_expression
    END
[ ; ]