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 通話期間繼承非預期的控制碼