168 votes

T-SQL - fonction avec les paramètres par défaut

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 la procédure de cette façon:

IF dbo.CheckIfSFExists( 23 ) = 0
    SET @retValue = 'bla bla bla;

Mais j'obtiens l'erreur:

Un nombre insuffisant d'arguments ont été fournies pour la procédure ou de la fonction de dbo.CheckIfSFExists.

Pourquoi n'est-il pas de travail?

242voto

SQLMenace Points 68670

vous avez de l'appeler comme cela

SELECT dbo.CheckIfSFExists(  23, default )

De Technet:

Lorsque l'un des paramètres de la fonction a une valeur par défaut, le mot-clé Par DÉFAUT doit être spécifié lors de l'appel de la fonction, afin de récupérer la valeur par défaut. Ce comportement est différent de l'utilisation de les paramètres avec des valeurs par défaut dans les procédures stockées dans lesquelles l'omission le paramètre implique également la valeur par défaut. Une exception à cette comportement lors de l'appel d'une fonction scalaire à l'aide de l'EXÉCUTER l'énoncé. Lors de l'utilisation de l'EXÉCUTER, le mot clé DEFAULT n'est pas nécessaire.

42voto

Douglas Osborne Points 41

Vous pouvez appeler cela de trois façons - avec les paramètres par DÉFAUT et de l'EXÉCUTER via

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

17voto

Curt Points 42871

Avec des fonctions définies par l'utilisateur, vous devez déclarer tous les paramètres, même s'ils ont une valeur par défaut.

La suite de l'exécution avec succès:

IF dbo.CheckIfSFExists( 23, default ) = 0
    SET @retValue = 'bla bla bla;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X