我在这里拉我的头发。下面的函数总是返回null,即使它能正常工作,如果我将代码拖出到查询窗口并手动设置输入参数。这个想法是,我有一个基于月份的不同查询,因为每个月的平均值都存储在不同的列中。我知道,桌子的标准化程度不是很好,但这是我必须努力的。我错过了什么?SQL Server函数总是返回NULL
ALTER FUNCTION [dbo].[fn_currentShareBal]
(
@currentDate datetime,
@account integer,
@acctType varchar
)
RETURNS money AS
BEGIN
DECLARE @dte char(10)
DECLARE @returnVal money
DECLARE @month int
SET @dte = CONVERT(char(10), @currentDate, 101)
SET @month = MONTH(@currentDate)
-- because of the table strucure the actual query depends on the month
IF @month = 1 SET @returnVal = (SELECT SUM(avg1)
FROM COSHAVG
WHERE cuID = @account
AND avgBalanceMonth = @dte
AND acctType = @acctType)
IF @month = 2 SET @returnVal = (SELECT SUM(avg2)
FROM COSHAVG
WHERE cuID = @account
AND avgBalanceMonth = @dte
AND acctType = @acctType)
IF @month = 3 SET @returnVal = (SELECT SUM(avg3)
FROM COSHAVG
WHERE cuID = @account
AND avgBalanceMonth = @dte
AND acctType = @acctType)
IF @month = 4 SET @returnVal = (SELECT SUM(avg4)
FROM COSHAVG
WHERE cuID = @account
AND avgBalanceMonth = @dte
AND acctType = @acctType)
IF @month = 5 SET @returnVal = (SELECT SUM(avg5)
FROM COSHAVG
WHERE cuID = @account
AND avgBalanceMonth = @dte
AND acctType = @acctType)
IF @month = 6 SET @returnVal = (SELECT SUM(avg6)
FROM COSHAVG
WHERE cuID = @account
AND avgBalanceMonth = @dte
AND acctType = @acctType)
IF @month = 7 SET @returnVal = (SELECT SUM(avg7)
FROM COSHAVG
WHERE cuID = @account
AND avgBalanceMonth = @dte
AND acctType = @acctType)
IF @month = 8 SET @returnVal = (SELECT SUM(avg8)
FROM COSHAVG
WHERE cuID = @account
AND avgBalanceMonth = @dte
AND acctType = @acctType)
IF @month = 9 SET @returnVal = (SELECT SUM(avg9)
FROM COSHAVG
WHERE cuID = @account
AND avgBalanceMonth = @dte
AND acctType = @acctType)
IF @month = 10 SET @returnVal = (SELECT SUM(avg10)
FROM COSHAVG
WHERE cuID = @account
AND avgBalanceMonth = @dte
AND acctType = @acctType)
IF @month = 11 SET @returnVal = (SELECT SUM(avg11)
FROM COSHAVG
WHERE cuID = @account
AND avgBalanceMonth = @dte
AND acctType = @acctType)
IF @month = 12 SET @returnVal = (SELECT SUM(avg12)
FROM COSHAVG
WHERE cuID = @account
AND avgBalanceMonth = @dte
AND acctType = @acctType)
RETURN @returnVal
END
GO
是'COSHAVG ''dbo'计划的一部分? – Glenn
什么是avgBalanceMonth?将它与10个字符的日期故意相比较? – hatchet
你是怎么调用这个函数的?你可能会考虑为你的输入参数设置默认值,看看是否改变了行为......如果你的话可能你的调用代码是行为不端...例如:在.NET中,内置解决方案可能会将NULL字符串转换为空白...只是一个想法 – Matthew