交叉应用UDF缺失的结果

时间:2012-10-01 21:45:15

标签: tsql sql-server-2005 cross-apply

我正在执行类似于以下

的SQL查询
SELECT fn.FullName, pn.LastName, pn.FirstName, pn.MI
FROM Source.dbo.tblPerson fn
    cross apply dbo.ParseFullName(fn.FullName) pn

对于前面的85行,结果看起来很好86th +对于从UDF派生的列总是具有NULL。如果我添加where或order by子句来更改结果集,则始终是返回完整结果集的前85行。因为85号是如此一致,我认为这是我忽略的东西。

任何人都可以提供任何帮助都很棒

2 个答案:

答案 0 :(得分:1)

尝试使用外部应用替换交叉应用。确保你的Sql不会在NULL上出错。

SELECT fn.FullName, pn.LastName, pn.FirstName, pn.MI
FROM Source.dbo.tblPerson fn
OUTER APPLY dbo.ParseFullName(fn.FullName) pn

答案 1 :(得分:1)

我弄清楚问题是什么。正在调用的UDF,根据示例,dbo.ParseFullName是调用OLE自动化对象。显然,我没有通过sp_OADestroy正确销毁对象。我正在销毁初始对象,但不是所有派生对象。一旦我在UDF结束时解决了这个问题,我开始按预期获得所有结果。感谢您的帮助。