TSQL 程序中无法识别 SQL 标量函数元素
Posted
技术标签:
【中文标题】TSQL 程序中无法识别 SQL 标量函数元素【英文标题】:SQL Scalar function element not recognized in TSQL program 【发布时间】:2010-07-04 20:43:29 【问题描述】:我有一个输入 db2 表,其中包含两个元素:loan_number、debt_to_income;该表的名称是#Input_Table。我正在尝试通过针对该表运行 SQL 程序来测试该函数。问题是由于某种原因在 SQL 程序中无法识别该函数的元素,也许我一直在寻找很久?我需要验证表中的输出是否会按 debt_to_income 字段的顺序输出。
这里是功能代码:
ALTER FUNCTION [dbo].[FN_DTI_BANDS]
(
-- the parameters for the function here
@FN_DTI_Band decimal(4,3)
)
RETURNS varchar(16)
AS
BEGIN
declare @Return varchar(16)
select @Return =
Case
when @FN_DTI_Band is NULL then ' Missing'
WHEN @FN_DTI_Band = 00.00 then ' Missing'
When @FN_DTI_Band < = 0.31 then 'Invalid'
When @FN_DTI_Band between 0.31 and 0.34 then '31-34'
When @FN_DTI_Band between 0.34 and 0.38 then '34-38'
When @FN_DTI_Band >= 0.38 then '38+'
else null end
-- Return the result of the function
RETURN @Return
END
这是 T-SQL 测试程序:
SELECT loan_number,dbo.FN_DTI_BANDS(debt_to_income)as FN_DTI_Band
from #Input_table
SELECT COUNT(*), FN_DTI_Band
FROM #Input_table
GROUP BY FN_DTI_Band
ORDER BY FN_DTI_Band
这是错误:
Msg 207, Level 16, State 1, Line 7
Invalid column name 'FN_DTI_Band'.
Msg 207, Level 16, State 1, Line 5
Invalid column name 'FN_DTI_Band'.
有人可以帮我找出我忽略的地方吗?谢谢!
【问题讨论】:
【参考方案1】:表 #input_table 没有名为 FN_DTI_Band 的列。
只有第一个 select 语句的结果具有该列名。
您需要使第一个选择语句成为第二个的子查询
类似这样的:
SELECT COUNT(*), T.FN_DTI_Band
FROM
(
SELECT loan_number,dbo.FN_DTI_BANDS(debt_to_income) as FN_DTI_Band
from #Input_table
) T
GROUP BY T.FN_DTI_Band
ORDER BY T.FN_DTI_Band
【讨论】:
尝试过并出现新错误:消息 8115,级别 16,状态 8,第 2 行将数字转换为数据类型数字的算术溢出错误。所以我尝试:使用 TEST SELECT COUNT(*), t.FN_DTI_BAND from ( SELECT loan_number, case when debt_to_income = 0 then 0 else dbo.FN_DTI_BANDS(debt_to_income) END as FN_DTI_Band from #T2 )T GROUP BY t.FN_DTI_Band ORDER BY t .FN_DTI_Band 还是不太对... 部分数据输入行在债务收入列中有 0.0000 您可以在 select 语句中使用 where 将其取出。 为什么要进行转换...只需将参数声明为数字而不是小数(4,3) 我只是没想到,SQL 对我来说还是有些新意。谢谢您指出这一点,非常感谢!【参考方案2】:尝试在函数名称前加上“dbo”。
Select Count(*), dbo.FN_DTI_Band
From....
【讨论】:
以上是关于TSQL 程序中无法识别 SQL 标量函数元素的主要内容,如果未能解决你的问题,请参考以下文章
从 postgres 表中提取 json 数组给出错误:无法从标量中提取元素