webentwicklung-frage-antwort-db.com.de

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

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

Es wurden nicht genügend Argumente für das Verfahren oder .__ zur Verfügung gestellt. Funktion dbo.fCalculateEstimateDate.

was nach meinem Verständnis nicht passieren darf.

Fehlt mir etwas? Vielen Dank im Voraus.

54
MaxRecursion

Von CREATE FUNCTION :

Wenn ein Parameter der Funktion einen Standardwert hat, muss beim Aufruf der Funktion das Schlüsselwort DEFAULT angegeben werden, um den Standardwert abzurufen. Dieses Verhalten unterscheidet sich von der Verwendung von Parametern mit Standardwerten in gespeicherten Prozeduren, bei denen das Weglassen des Parameters auch den Standardwert impliziert.

Also musst du folgendes tun:

SELECT dbo.fCalculateEstimateDate(647,DEFAULT)
90

SELECT dbo.fCalculateEstimateDate(647) call funktioniert weiterhin wie folgt:

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
20
Gus

Ich habe den Befehl EXECUTE gefunden, wie er hier vorgeschlagen wird T-SQL - Funktion mit Standardparametern , um gut zu funktionieren. Bei diesem Ansatz ist beim Aufrufen der Funktion kein 'DEFAULT' erforderlich. Sie lassen den Parameter wie bei einer gespeicherten Prozedur weg.

0
Learning2Code