KB2671318-修正程式:在 SQL Server 2012 中完成最後一個執行之後,才能完成第一次執行 xp_cmdshell 儲存程式的過程。

Microsoft 將 Microsoft SQL Server 2012 發佈成一個可下載的檔案。 因為修正程式是累加的,所以每個新發行版本本都包含舊版 SQL Server 2012 更新版本中包含的所有修復程式及所有安全性更新。

徵狀

假設您同時在 Microsoft SQL Server 2012 的多個會話中同時執行許多 xp_cmdshell 的儲存程式。 在這種情況下,第一次執行的 xp_cmdshell 儲存程式不會完成,直到最後一次執行完成為止。

原因

之所以會發生此問題,是因為在您同時執行 xp_cmdshell 的儲存程式時,進程會繼承控制碼。 CreateProcess API 需要處理繼承以重新導向標準輸出與錯誤訊息。 如果同時執行多個 xp_cmdshell 的存儲程式程式,新開啟的程式就可以繼承現有進程的控制碼。 不過, xp_cmdshell 的儲存程式會等到所有開啟的進程關閉控點。 因此,當多個處理常式繼承控點時,所有 xp_cmdshell 的執行都必須等到最長的進程關閉控制碼為止。

解決方案

若要解決此問題,請套用下列累計更新。 此更新新增 CreateProcess API STARTUPINFOEX 選項,這些選項可防止跨進程的處理常式繼承。

累積更新資訊

SQL Server 2012 的累積更新套件 1 Service Pack 1

此問題的修正程式是在累積更新1中第一次發行。如需有關如何取得適用于 SQL Server 2012 Service Pack 1 的累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

2765331 SQL Server 2012 的累積更新套件 1 Service Pack 1注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2012 修正版本中所包含的所有修復程式及所有安全性修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2772858 在發行 SQL Server 2012 Service Pack 1 之後發行的 SQL Server 2012 組建

SQL Server 2012

此問題的修正程式是以累積更新4第一次發行。如需如何取得此 SQL Server 2012 累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

2758687 SQL Server 2012 的累積更新套件4注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2012 修正版本中所包含的所有修復程式及所有安全性修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2692828 在發行 SQL Server 2012 之後發行的 SQL Server 2012 組建

狀態

Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。

參考

如需 CreateProcess 函數的詳細資訊,請移至下列 MSDN 網站:

CreateProcess 函數的一般資訊如需 xp_cmdshell 的儲存程式的詳細資訊,請移至下列 MSDN 網站:

Xp_cmdshell 儲存程式的一般資訊 如需類似問題的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

315939 PRB: Child 會在 CreateProcess 通話期間繼承非預期的控制碼

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

Thank you for your feedback!

Thank you for your feedback! It sounds like it might be helpful to connect you to one of our Office support agents.

×