0

我正在执行类似于以下的 SQL 查询

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

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

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

4

2 回答 2

1

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

于 2012-10-02T20:36:07.597 回答
1

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

SELECT fn.FullName, pn.LastName, pn.FirstName, pn.MI
FROM Source.dbo.tblPerson fn
OUTER APPLY dbo.ParseFullName(fn.FullName) pn
于 2012-10-01T21:47:56.803 回答