私はこのスクリプトを持っています:
CREATE FUNCTION dbo.CheckIfSFExists(@param1 INT, @param2 BIT = 1 )
RETURNS BIT
AS
BEGIN
IF EXISTS ( bla bla bla )
RETURN 1;
RETURN 0;
END
GO
私はこの方法で手順でそれを使用したい:
IF dbo.CheckIfSFExists( 23 ) = 0
SET @retValue = 'bla bla bla';
しかし、私はエラーを受け取ります:
プロシージャまたは関数dbo.CheckIfSFExistsに指定された引数の数が不十分です。
なぜ機能しないのですか?
あなたはこのように呼ぶ必要があります
SELECT dbo.CheckIfSFExists(23, default)
Technet から:
関数のパラメーターにデフォルト値がある場合、デフォルト値を取得するには、関数が呼び出されるときにキーワードDEFAULTを指定する必要があります。この動作は、パラメータを省略するとデフォルト値も含まれるストアドプロシージャでデフォルト値を持つパラメータを使用する場合とは異なります。この動作の例外は、EXECUTEステートメントを使用してスカラー関数を呼び出す場合です。 EXECUTEを使用する場合、DEFAULTキーワードは必要ありません。
パラメータ、DEFAULT、EXECUTEの3つの方法で呼び出すことができます。
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
ユーザー定義関数では、デフォルト値がある場合でも、すべてのパラメーターを宣言する必要があります。
以下が正常に実行されます。
IF dbo.CheckIfSFExists( 23, default ) = 0
SET @retValue = 'bla bla bla;