あるデータベースから別のデータベースへの関数をスクリプト化しようとしています。これらの関数は私が書いたわけではないので、本来の意図はわかりません。そのうちの 1 つが私に問題を引き起こしています。この関数は、1 つのパラメーターGetPayDate
のみを受け入れます。datetime
ただし、呼び出されると:
SET @Minutes = (SELECT SUM(DATEDIFF(n, '1/1/2008', DateTime)) FROM Activities WHERE EmployeeID = @EmployeeID AND dbo.GetPayDate(DateTime, Homework) = @PayDate AND ActivityTypeID = 2)
追加のパラメーターが渡されます。これは複数の場所で発生します。元のデータベースでは問題なく動作しますが、新しいデータベースにスクリプトを作成しようとすると、次のようにスローされます。
Msg 8144, Level 16, State 2, Procedure GetTotalHours, Line 8
Procedure or function dbo.GetPayDate has too many arguments specified.
あるデータベースでは機能するのに、他のデータベースでは機能しないのはなぜですか? また、その余分なパラメーターはそもそもそこで何をしているのでしょうか?
ソース サーバーからの定義:
CREATE FUNCTION [dbo].[GetPayDate](@Date DATETIME) RETURNS DATETIME AS BEGIN DECLARE @FirstPayPeriod DATETIME DECLARE @PayPeriodsElapsed INT DECLARE @PayPeriod DATETIME SET @FirstPayPeriod = '5/4/2008' SET @PayPeriodsElapsed = 0 IF @Date IS NULL SET @PayPeriod = NULL ELSE BEGIN SET @PayPeriodsElapsed = CONVERT(INT, DATEDIFF(d, @FirstPayPeriod, @Date) / 14) IF DATEDIFF(d, @FirstPayPeriod, @Date) % 14 > 0 SET @PayPeriodsElapsed = @PayPeriodsElapsed + 1 SET @PayPeriod = DATEADD (d, @PayPeriodsElapsed * 14, @FirstPayPeriod) SET @PayPeriod = DATEADD (d, 5, @PayPeriod) END RETURN @PayPeriod END
宛先サーバーからの定義:
CREATE FUNCTION [dbo].[GetPayDate](@Date DATETIME) RETURNS DATETIME AS BEGIN DECLARE @FirstPayPeriod DATETIME DECLARE @PayPeriodsElapsed INT DECLARE @PayPeriod DATETIME SET @FirstPayPeriod = '5/4/2008' SET @PayPeriodsElapsed = 0 IF @Date IS NULL SET @PayPeriod = NULL ELSE BEGIN SET @PayPeriodsElapsed = CONVERT(INT, DATEDIFF(d, @FirstPayPeriod, @Date) / 14) IF DATEDIFF(d, @FirstPayPeriod, @Date) % 14 > 0 SET @PayPeriodsElapsed = @PayPeriodsElapsed + 1 SET @PayPeriod = DATEADD (d, @PayPeriodsElapsed * 14, @FirstPayPeriod) SET @PayPeriod = DATEADD (d, 5, @PayPeriod) END RETURN @PayPeriod END