搭配 CROSS APPLY 運算子在 SQL Server 2005 中的查詢中使用資料表值函式 (TVF) 時,FIX: 錯誤訊息: 「 有是系統記憶體不足,無法執行這項查詢 」

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:924954
本文已封存。本文係以「現狀」提供且不會再更新。
Bug #: 50000224 (SQL Hotfix)
Microsoft 為一個可下載檔案散佈 Microsoft SQL Server 2005 的修正程式。因為修正程式是累積,每個新版本包含所有 Hotfix 及先前的 SQL Server 2005 隨附所有安全性修正程式都修正發行。
結論
本文將告訴您下列關於此 Hotfix 版本:
  • Hotfix 套件所修正的問題
  • 套用 Hotfix 套件的先決條件
  • 是否您必須重新啟動電腦套用 Hotfix 套件之後,
  • 是否 Hotfix 套件就會取代任何其他 Hotfix 套件
  • 套用 Hotfix 套件之後,您必須是否做任何登錄變更
  • 包含在 Hotfix 套件中的檔案
徵狀
考慮下列案例。在 Microsoft SQL Server 2005 您可以搭配 CROSS APPLY 運算子,查詢中使用資料表值函式 (TVF)。您可以使用 Transact-SQL TVF 或一般語言 Runtime TVF CLR。在這種情況下可能會收到下列錯誤訊息:
訊息 701、 層級 17、 狀態 123、 第 2 行
沒有系統記憶體不足,無法執行此查詢。
通常,左邊查詢的資料表會產生大量的資料列如果遇到這個問題。
發生的原因
查詢已完成執行前,不釋放用於 [TVF 參數的記憶體,就會發生這個問題。 當您使用 [CROSS APPLY 運算子搭配 TVF 之 TVF 可能被呼叫多次即使當查詢執行一次。[TVF 呼叫許多次時, 被耗用大量記憶體。
解決方案

Hotfix 資訊

Microsoft 提供支援的 Hotfix。不過,此 Hotfix 旨在修正本文中所述隨問題。只會發生此特定問題的系統套用此 Hotfix。這個 Hotfix 可能會接受額外的測試。因此,如果您不會嚴重影響這個問題,我們建議您等候下一個包含此 Hotfix 的軟體更新。

如果此 Hotfix 可供下載,您可在本知識庫文件的頂端找到「 可用的 Hotfix 下載 」區段。如果本節 Does Not Appear 請連絡[ Microsoft 客戶服務 ] 和 [ 支援 ] 以取得此 Hotfix。

附註如果發生其他問題,或如果需要任何疑難排解,您可能必須建立個別的服務要求。和此 Hotfix 無關的額外支援問題適用一般的支援費用。如需 Microsoft 客戶服務支援部門電話號碼的完整清單或要建立個別的服務要求,請造訪下列 Microsoft 網站:附註「 下載 Hotfix 」 表單會顯示此 Hotfix 會出現,以供使用的語言。如果您沒有看到您的語言,是因為此 Hotfix 是不適用您的語言。

必要條件

  • Microsoft SQL Server 2005 Service Pack 1 (SP1)

    如有關如何取得 SQL Server 2005 SP1,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
    913089如何取得最新的 Service Pack,SQL Server 2005 的

重新啟動資訊

您沒有套用此 Hotfix 之後重新啟動電腦。

登錄資訊

您沒有變更登錄。

Hotfix 檔案資訊

此 Hotfix 包含只需修正本文所列問題的那些檔案。此 Hotfix 並未包含必須將產品完整更新至最新版組建的所有檔案。

此 Hotfix 的英文版在檔案屬性 (或更新版本的檔案屬性) 如下列表格中所列。這些檔案的日期和時間為 Coordinated Universal Time (UTC)。當您檢視檔案資訊時,會將它轉換為當地時間。若要到 UTC 與當地時間差異使用在 [日期及時間中項目控制台中的 [時區] 索引標籤]。
SQL Server 2005 32 位元版本
檔案名稱檔案版本檔案大小日期時間平台
Logread.exe2005.90.2192.0398,1122006 年九月 19 日15: 10x86
Microsoft.analysisservices.adomdclient.dll9.0.2192.0543,5202006 年九月 19 日15: 11x86
Microsoft.analysisservices.deploymentengine.dll9.0.2192.0138,0162006 年九月 19 日15: 09x86
Microsoft.analysisservices.dll9.0.2192.01,215,2642006 年九月 19 日15: 10x86
Microsoft.sqlserver.mgdsqldumper.dll2005.90.2192.075,5522006 年九月 19 日15: 08x86
Microsoft.sqlserver.sqlenum.dll9.0.2192.0908,0642006 年九月 19 日15: 10x86
Msgprox.dll2005.90.2192.0197,9202006 年九月 19 日15: 09x86
Msmdlocal.dll9.0.2192.015,609,6322006 年九月 19 日15: 11x86
Msmdredir.dll9.0.2192.03,990,3042006 年九月 19 日15: 11x86
Replprov.dll2005.90.2192.0547,6162006 年九月 19 日15: 11x86
Replrec.dll2005.90.2192.0782,1122006 年九月 19 日15: 10x86
Sqlaccess.dll2005.90.2192.0347,9362006 年九月 19 日15: 10x86
Sqlagent90.exe2005.90.2192.0319,2642006 年九月 19 日15: 10x86
Sqlservr.exe2005.90.2192.028,962,1362006 年九月 19 日15: 12x86
Xpstar90.dll2005.90.2192.0292,6402006 年九月 19 日14: 02x86
Xpstar90.rll2005.90.2192.0152,8642006 年九月 19 日15: 10x86
SQL Server 2005 x 64 版本
檔案名稱檔案版本檔案大小日期時間平台
Logread.exe2005.90.2192.0522,5282006 年九月 19 日14: 23x64
Microsoft.analysisservices.adomdclient.dll9.0.2192.0543,5202006 年九月 19 日14: 23x86
Microsoft.analysisservices.adomdclient.dll9.0.2192.0543,5202006 年九月 19 日15: 11x86
Microsoft.analysisservices.deploymentengine.dll9.0.2192.0138,0162006 年九月 19 日15: 09x86
Microsoft.analysisservices.dll9.0.2192.01,215,2642006 年九月 19 日15: 10x86
Microsoft.sqlserver.mgdsqldumper.dll2005.90.2192.091,4242006 年九月 19 日14: 21x64
Microsoft.sqlserver.mgdsqldumper.dll2005.90.2192.075,5522006 年九月 19 日15: 08x86
Microsoft.sqlserver.sqlenum.dll9.0.2192.0875,2962006 年九月 19 日14: 20x86
Msgprox.dll2005.90.2192.0259,3602006 年九月 19 日14: 22x64
Msmdlocal.dll9.0.2192.015,609,6322006 年九月 19 日15: 11x86
Msmdredir.dll9.0.2192.03,990,3042006 年九月 19 日15: 11x86
Replprov.dll2005.90.2192.0745,2482006 年九月 19 日14: 20x64
Replrec.dll2005.90.2192.01,008,4162006 年九月 19 日14: 21x64
Sqlaccess.dll2005.90.2192.0355,1042006 年九月 19 日14: 23x86
Sqlagent90.exe2005.90.2192.0390,9442006 年九月 19 日14: 23x64
Sqlservr.exe2005.90.2192.039,350,0482006 年九月 19 日14: 21x64
Xpstar90.dll2005.90.2192.0540,9602006 年九月 19 日14: 23x64
Xpstar90.rll2005.90.2192.0153,3762006 年九月 19 日14: 21x64
SQL Server 2005 Itanium 架構版本
檔案名稱檔案版本檔案大小日期時間平台
Logread.exe2005.90.2192.01,095,4562006 年九月 19 日13: 52IA 64
Microsoft.analysisservices.adomdclient.dll9.0.2192.0543,5202006 年九月 19 日13: 51x86
Microsoft.analysisservices.adomdclient.dll9.0.2192.0543,5202006 年九月 19 日15: 11x86
Microsoft.analysisservices.deploymentengine.dll9.0.2192.0138,0162006 年九月 19 日15: 09x86
Microsoft.analysisservices.dll9.0.2192.01,215,2642006 年九月 19 日15: 10x86
Microsoft.sqlserver.mgdsqldumper.dll2005.90.2192.0163,1042006 年九月 19 日13: 50IA 64
Microsoft.sqlserver.mgdsqldumper.dll2005.90.2192.075,5522006 年九月 19 日15: 08x86
Microsoft.sqlserver.sqlenum.dll9.0.2192.0875,2962006 年九月 19 日13: 52x86
Msgprox.dll2005.90.2192.0542,4962006 年九月 19 日13: 51IA 64
Msmdlocal.dll9.0.2192.048,585,5042006 年九月 19 日13: 53IA 64
Msmdredir.dll9.0.2192.06,237,4722006 年九月 19 日13: 53IA 64
Replprov.dll2005.90.2192.01,617,1842006 年九月 19 日13: 52IA 64
Replrec.dll2005.90.2192.02,141,4722006 年九月 19 日13: 52IA 64
Sqlaccess.dll2005.90.2192.0349,4722006 年九月 19 日13: 51x86
Sqlagent90.exe2005.90.2192.01,143,5842006 年九月 19 日13: 52IA 64
Sqlservr.exe2005.90.2192.072,233,7602006 年九月 19 日13: 53IA 64
Xpstar90.dll2005.90.2192.0951,0722006 年九月 19 日13: 51IA 64
Xpstar90.rll2005.90.2192.0152,3522006 年九月 19 日13: 50IA 64
狀況說明
Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。
其他相關資訊
當您在執行 T-SQL 查詢時,您注意到下列項目逐漸增加,直到發生錯誤 701:
  • CACHESTORE_SQLCP 記憶體顧客從 sys.dm_os_memory_clerks SQL Server 作業系統管理檢視
  • MEMOBJ_XSTMT 記憶體物件,從 sys.dm_os_memory_objects SQL Server 作業系統管理檢視
如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
824684用來描述 Microsoft 軟體更新標準術語的說明

如果要重現問題的步驟

  1. 若要更快重現問題,設定 SQL Server 2005 使用少量的記憶體。若要執行此動作執行 SQL Server 2005 中的 [以下的指令碼]。
    -- Enable advanced optionsUSE masterEXEC sp_configure 'show advanced options', 1goRECONFIGURE WITH OVERRIDEgo-- Set the maximum amount of memory to 300 MBexec sp_configure 'max server memory', 300goreconfigure with overridegodbcc freeproccachego
  2. 停止並重新啟動 SQL Server 服務,請在命令提示字元執行下列命令:
    net stop mssqlserver
    net start mssqlserver
  3. 在 SQL Server 2005 中執行下列的 Transact-SQL 陳述式。
    drop table tgocreate table t (c1 int, c2 int, c3 int, c4 int, c5 int, c6 int, c7 int, c8 int, c9 int, c10 int)godrop function fn_testgocreate function fn_test (@p1 int, @p2 int, @p3 int, @p4 int, @p5 int, @p6 int, @p7 int, @p8 int, @p9 int, @p10 int)returns @t table (c1 nvarchar(4) )with schemabindingasbegininsert into @t values (N'abcd')returnendgodrop function fn_scalargocreate function fn_scalar (@p1 int, @p2 int, @p3 int, @p4 int, @p5 int, @p6 int, @p7 int, @p8 int, @p9 int, @p10 int)returns nvarchar(4) with schemabindingasbegindeclare @s nvarchar (4)set @s = N'abcd' return @sendgodrop function fn_test2gocreate function fn_test2 ()returns @t table (c1 nvarchar(4) )with schemabindingasbegininsert into @t values (N'abcd')returnendgoset nocount ongodeclare @i intset @i = 0while @i < 5000000begininsert into t values (@i, @i, @i, @i, @i, @i, @i, @i, @i, @i)set @i = @i + 1endgo-- The following select query returns the 701 error if you restrict max server memory to 300 MBselect count(*) from t cross apply dbo.fn_test(c1,c2,c3,c4,c5,c6,c7,c8,c9,c10)
附註這些步驟使用 Transact-SQL TVF。當您使用 CLR TVF 時,也會發生這個問題。

警告:本文為自動翻譯

內容

文章識別碼:924954 - 最後檢閱時間:01/17/2015 16:08:49 - 修訂: 1.6

Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems, Microsoft SQL Server 2005 Enterprise X64 Edition, Microsoft SQL Server 2005 Standard X64 Edition, Microsoft SQL Server 2005 Standard Edition

  • kbnosurvey kbarchive kbmt kbautohotfix kbfix kbsql2005tsql kbexpertiseadvanced kbhotfixserver kbqfe kbpubtypekc KB924954 KbMtzh
意見反應