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句またはorderby句を追加して結果セットを変更すると、結果の完全なセットを返すのは常に最初の85行です。85という数字は一貫しているので、見落としているものだと思います。

誰もが提供できるどんな助けも素晴らしいでしょう

4

2 に答える 2

1

私は問題が何であるかを理解しました。例のように、呼び出されていたUDFは、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 に答える