Je cherche une solution, comment créer SQL UDF avec des parameters facultatifs.
Pseudocode pour la fonction où Param1 est nécessaire et Param2 peut être rempli (mais pas nécessaire):
dbo.myFnc(Param1 int [, Param2 int])
Y at-il un moyen de créer cette fonction? Pour l'échantillon embedded existant, regardez la fonction STR
STR ( float_expression [ , length [ , decimal ] ] )
Vous pouvez définir des parameters par défaut dans l'instruction create (= par défaut):
--Transact-SQL Inline Table-Valued Function Syntax CREATE FUNCTION [ schema_name. ] function_name ( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type [ = default ] [ READONLY ] } [ ,...n ] ] ) RETURNS TABLE [ WITH <function_option> [ ,...n ] ] [ AS ] RETURN [ ( ] select_stmt [ ) ] [ ; ]
Source MSDN
Donc, vous pouvez faire quelque chose comme:
CREATE FUNCTION dbo.myFnc( @param1 int, -- necessary @param2 int = 5 -- 5 as default )
Mais comme shree.pat18 a dit que vous devez appeler le paramètre de fonction optionnel avec le "défaut". Comme:
dbo.myFnc(5, default)
Vous devez passer tous les arguments aux fonctions, contrairement aux procédures stockées. Vous pouvez utiliser le mot-key default
pour indiquer que la valeur par défaut doit être utilisée pour le paramètre, plutôt qu'une valeur spécifiée par l'user.
Vous pouvez donc créer votre fonction comme ceci:
CREATE FUNCTION dbo.myFnc ( @param1 int, @param2 int) ...
puis appelez la fonction comme ceci:
dbo.myFnc(Param1, default)
Je ne suis pas sûr de savoir de quel SQL vous parlez, mais est-il possible de surcharger l'UDF?
dbo.myFnc(Param1 int ) dbo.myFnc(Param1 int , Param2 int)
un peu de sql le permet pas. Si ce n'est pas le cas, peut-être pourriez-vous essayer quelque chose que l'on pourrait gérer comme une input nulle
create function func ( @in1 int, @in2 int ) returns int as begin declare @count int select @count = count(*) from table where field1 = isnull(@in1, field1) and field2 = isnull(@in2, field2) return @count end go
donc tu pourrais faire quelque chose comme
select func(null,9)