2012-10-01 29 views
0

我執行一個SQL查詢類似於以下跨UDF缺失結果的應用

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

結果看起來不錯的第85行第86個+總是有NULL從UDF派生列。如果我添加一個where或order by子句來更改結果集,它始終是返回完整結果集的前85行。因爲85號碼如此一致,我認爲這是我忽略的東西。

任何人都可以提供的幫助會很好

回答

1

我想通了什麼問題了。根據示例,正在調用的UDF是dbo.ParseFullName,它調用OLE自動化對象。顯然,我沒有通過sp_OADestroy正確銷燬對象。我正在銷燬最初的對象,但不是所有的派生對象。一旦我在UDF結束時解決了這個問題,我就開始按預期獲得所有結果。感謝所有的幫助。

+0

+1尋找你自己的答案! – jTC

1

嘗試用outer apply替換cross apply。確保你的Sql不會在NULL上出錯。

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

返回相同的結果 –

+0

聽起來像這可能是一個UDF解析方式的問題。你可以添加到你的答案?你的tblPerson有多少行,順便說一句? – jTC

+0

感謝您的協助。我想清楚我的問題是什麼。我的答案張貼在下面。 –