T - SQL-fonction avec 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 une 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é fournis pour la procédure ou la fonction dbo.CheckIfSFExists.
pourquoi ça ne marche pas?
4 réponses
vous devez l'appeler comme ça
SELECT dbo.CheckIfSFExists(23, default)
À Partir De Technet :
quand un paramètre de la fonction a une valeur par défaut, le mot-clé La valeur par défaut doit être spécifiée lorsque la fonction est appelée pour récupérer la valeur par défaut. Ce comportement est différent de l'utilisation paramètres avec valeurs par défaut dans les procédures stockées dans lequel omettre le paramètre implique également la valeur par défaut. Un exception à cette règle comportement lors de l'appel d'une fonction scalaire à l'aide de l'EXÉCUTER déclaration. Lors de L'utilisation D'EXECUTE, le mot clé par défaut n'est pas requis.
vous pouvez l'appeler de trois façons - avec des paramètres, par défaut et via L'exécution
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 des fonctions définies par l'utilisateur, vous devez déclarer chaque paramètre, même s'ils ont une valeur par défaut.
le suivant s'exécuterait avec succès:
IF dbo.CheckIfSFExists( 23, default ) = 0
SET @retValue = 'bla bla bla;
Une façon de contourner ce problème est d'utiliser des procédures stockées avec un paramètre de sortie.
exec sp_mysprocname @returnvalue output, @firstparam = 1, @secondparam=2
valeurs vous ne passez pas par défaut aux valeurs par défaut définies dans la procédure stockée elle-même. Et vous pouvez obtenir les résultats de votre variable de sortie.