81

私はすでにSQLServer2005に次のような関数を持っています。

ALTER function [dbo].[fCalculateEstimateDate] (@vWorkOrderID numeric)
Returns varchar(100)  AS
Begin
  <Function Body>
End

この関数を変更して、追加のオプションパラメータ@ToDateを受け入れるようにします。@Todateが提供されている場合は、関数にロジックを追加してから、既存のコードで何か他のことを続行します。

関数を次のように変更しました。

ALTER function [dbo].[fCalculateEstimateDate] (@vWorkOrderID numeric,@ToDate DateTime=null)
Returns varchar(100)  AS
Begin
  <Function Body>
End

これで、関数を次のように呼び出すことができます。

SELECT dbo.fCalculateEstimateDate(647,GETDATE())

ただし、次の呼び出しでエラーが発生します。

SELECT dbo.fCalculateEstimateDate(647)

なので

プロシージャまたは関数dbo.fCalculateEstimateDateに指定された引数の数が不十分です。

私の理解によると、これは起こらないはずです。

私は何かが足りないのですか?前もって感謝します。

4

3 に答える 3

122

差出人CREATE FUNCTION

DEFAULT関数のパラメーターにデフォルト値がある場合、デフォルト値を取得するために関数を呼び出すときにキーワードを指定する必要があります。この動作は、パラメーターを省略するとデフォルト値も意味するストアドプロシージャでデフォルト値のパラメーターを使用する場合とは異なります。

だからあなたはする必要があります:

SELECT dbo.fCalculateEstimateDate(647,DEFAULT)
于 2012-10-04T07:07:28.453 に答える
28

SELECT dbo.fCalculateEstimateDate(647)通話を機能させ続ける方法は次のとおりです。

ALTER function [dbo].[fCalculateEstimateDate] (@vWorkOrderID numeric)
Returns varchar(100)  AS
   Declare @Result varchar(100)
   SELECT @Result = [dbo].[fCalculateEstimateDate_v2] (@vWorkOrderID,DEFAULT)
   Return @Result
Begin
End

CREATE function [dbo].[fCalculateEstimateDate_v2] (@vWorkOrderID numeric,@ToDate DateTime=null)
Returns varchar(100)  AS
Begin
  <Function Body>
End
于 2015-05-06T15:05:46.933 に答える
2

ここで提案されているように、EXECUTEコマンドを見つけました。T-SQL-デフォルトのパラメーターを使用した関数が適切に機能します。このアプローチでは、関数を呼び出すときに「DEFAULT」は必要ありません。ストアドプロシージャの場合と同様に、パラメータを省略するだけです。

于 2016-10-03T20:42:15.913 に答える