Ändern Sie eine SQL Server-Funktion, um neue optionale Parameter zu akzeptieren




sql-server-2005 (2)

Ich habe bereits eine Funktion in SQL Server 2005 als:

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

Ich möchte diese Funktion ändern, um den zusätzlichen optionalen Parameter @ToDate zu akzeptieren. Ich füge Logik in der Funktion hinzu, wenn @Todate Provided dann etwas weiter macht, mit dem vorhandenen Code.

Ich habe die Funktion wie folgt geändert:

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

Nun kann ich Funktion aufrufen als:

SELECT dbo.fCalculateEstimateDate(647,GETDATE())

Bei folgendem Aufruf gibt es jedoch einen Fehler:

SELECT dbo.fCalculateEstimateDate(647)

wie

Für die Prozedur oder Funktion dbo.fCalculateEstimateDate wurde keine ausreichende Anzahl von Argumenten angegeben.

was nach meinem Verständnis nicht passieren darf.

Fehlt mir etwas? Danke im Voraus.


Die Funktionsweise von SELECT dbo.fCalculateEstimateDate(647) bleibt erhalten:

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

Ich habe festgestellt, dass der Befehl EXECUTE, wie hier vorgeschlagen, T-SQL - Funktion mit Standardparametern gut funktioniert. Bei diesem Ansatz ist beim Aufruf der Funktion kein 'DEFAULT' erforderlich. Sie lassen den Parameter wie bei einer gespeicherten Prozedur weg.





sql-server-2005