Paramètres facultatifs dans SQL UDF sans mot-key DEFAULT

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)