Mam już funkcji w SQL Server 2005 jako:Alter funkcję serwera SQL, aby zaakceptować nowy opcjonalny parametr
ALTER function [dbo].[fCalculateEstimateDate] (@vWorkOrderID numeric)
Returns varchar(100) AS
Begin
<Function Body>
End
Chcę zmodyfikować tę funkcję, aby zaakceptować dodawania opcjonalnego parametru @ToDate. Zamierzam dodać logikę do funkcji, jeśli @Todate Provided to zrobi coś innego z istniejącym kodem.
I zmodyfikowano funkcję jako:
ALTER function [dbo].[fCalculateEstimateDate] (@vWorkOrderID numeric,@ToDate DateTime=null)
Returns varchar(100) AS
Begin
<Function Body>
End
teraz mogę wywołania funkcji jak:
SELECT dbo.fCalculateEstimateDate(647,GETDATE())
Ale daje błąd na poniższej rozmowy:
SELECT dbo.fCalculateEstimateDate(647)
jako
Niewystarczająca liczba argumentów została dostarczona do procedury lub funkcja dbo.fCalculateEstimateDate.
które zgodnie z moim rozumieniem nie powinno się zdarzyć.
Czy brakuje mi czegoś? Z góry dzięki.
Czy istnieje sposób na zachowanie działającego polecenia SELECT dbo.fCalculateEstimateDate (647) ?? – MaxRecursion
Nie. Każde wywołanie funkcji musi mieć taką samą liczbę określonych parametrów. Zawsze możesz utworzyć funkcję * new * z dwoma parametrami i przekształcić 'dbo.fCalculateEstimateDate' w funkcję owijki, która po prostu doda drugi parametr do wywołania nowej funkcji. –
Dlaczego, na litość boską, różni się to od zapisanych procedur? Jestem pewien, że możesz po prostu pominąć drugi parametr i po prostu zadziała! – Peter