udf 在 t-sql 编程中没有正确返回数据

Posted

技术标签:

【中文标题】udf 在 t-sql 编程中没有正确返回数据【英文标题】:udf not returning data correctly in t-sql programming 【发布时间】:2010-07-02 19:28:01 【问题描述】:

功能如下:

ALTER FUNCTION dbo.FN_GET_QUARTER
 -- the parameters for the function here
(
  @FN_Qtr_date  datetime 
)

RETURNS INT
AS
BEGIN

    RETURN datepart(qq,@FN_Qtr_date)
END 

这里是 SQL 报告:

IF(SELECT(OBJECT_ID('TEMPDB..#T1'))) IS NOT NULL DROP TABLE #T1


SELECT      L_NUMBER, LAST_MAINTENANCE_DATE,
            dbo.FN_FICO_BANDS (LAST_MAINTENANCE_DATE) AS  FN_Qtr_date
INTO  #T1
FROM  OPENQUERY(SrvLink, '

SELECT      LOAN_NUMBER,LAST_MAINTENANCE_DATE
FROM  BDE.loan_V
FETCH FIRST 1000 ROWS ONLY WITH UR ')
GO


SELECT      COUNT(*), FN_Qtr_date

FROM  #T1
GROUP BY FN_Qtr_date
ORDER BY FN_Qtr_date

结果:

 L count               FN_Qtr_Date
  150                   Invalid
  355                   Invalid

我不知道我做错了什么..

【问题讨论】:

你定义 FN_GET_QUARTER 并调用 FN_FICO_BANDS :-? 【参考方案1】:

我首先想到的是你打电话给dbo.FN_FICO_BANDS而不是dbo.FN_GET_QUARTER

【讨论】:

【参考方案2】:

dbo.FN_FICO_BANDS (LAST_MAINTENANCE_DATE) AS FN_Qtr_date

如果您要在 LAST_MAINTENANCE_DATE 使用该功能,您需要使用: dbo.FN_Qtr_Date(LAST_MAINTENANCE_DATE) 作为你的季度

【讨论】:

以上是关于udf 在 t-sql 编程中没有正确返回数据的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL里数据库工程师都不知道的秘密之SQL Server自定义函数UDF

返回财政年度的第一天(4 月 1 日)T-SQL

在 UDF 或存储过程中使用参数返回表

用于 UDF 的 Hive DATE 和 TIMESTAMP 的正确数据类型

UDF 返回不同的 SQL 语句

SQL Server 2008 T-SQL UDF Split() 剪裁