J'ai ce script:
CREATE FUNCTION dbo.CheckIfSFExists(@param1 INT, @param2 BIT = 1 )
RETURNS BIT
AS
BEGIN
IF EXISTS ( bla bla bla )
RETURN 1;
RETURN 0;
END
GO
Je veux l'utiliser dans une procédure de cette façon:
IF dbo.CheckIfSFExists( 23 ) = 0
SET @retValue = 'bla bla bla';
Mais je reçois l'erreur:
Un nombre insuffisant d'arguments ont été fournis pour la procédure ou la fonction dbo.CheckIfSFExists.
Pourquoi ça ne marche pas?
vous devez l'appeler comme ça
SELECT dbo.CheckIfSFExists(23, default)
De Technet :
Lorsqu'un paramètre de la fonction a une valeur par défaut, le mot-clé DEFAULT doit être spécifié lors de l'appel de la fonction afin de récupérer la valeur par défaut. Ce comportement diffère de l'utilisation de paramètres avec des valeurs par défaut dans les procédures stockées dans lesquelles l'omission du paramètre implique également la valeur par défaut. Une exception à ce comportement se produit lors de l'appel d'une fonction scalaire à l'aide de l'instruction EXECUTE. Lors de l'utilisation de EXECUTE, le mot clé DEFAULT n'est pas requis.
Vous pouvez l’appeler de trois manières: avec des paramètres, avec DEFAULT et via EXECUTE
SET NOCOUNT ON;
DECLARE
@Table SYSNAME = 'YourTable',
@Schema SYSNAME = 'dbo',
@Rows INT;
SELECT dbo.TableRowCount( @Table, @Schema )
SELECT dbo.TableRowCount( @Table, DEFAULT )
EXECUTE @Rows = dbo.TableRowCount @Table
SELECT @Rows
Avec les fonctions définies par l'utilisateur, vous devez déclarer chaque paramètre, même s'il a une valeur par défaut.
Les éléments suivants s'exécuteraient avec succès:
IF dbo.CheckIfSFExists( 23, default ) = 0
SET @retValue = 'bla bla bla;