UDF avec les paramètres par défaut
J'ai un pb pourquoi je suis obligé de rentrer tous les paramètres de ma fonction?
Code:
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:
SELECT [dbo].[DWH_GET_MAXDATE] ('20011231', '20000101' )
j'ai un message :
Code:
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:
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
[ ; ] |