Sign in with Microsoft
Sign in or create an account.
Hello,
Select a different account.
You have multiple accounts
Choose the account you want to sign in with.

徵狀

假設您將資料行新增至 Microsoft SQL Server 2012 或 SQL Server 2014 中的資料表。 當列的大小接近8060個位元組的允許大小上限時,新增作業可能需要花很長的時間。

原因

發生這個問題的原因是,當列的總大小接近允許的最大列大小時,SQL Server 會對資料表進行完整的掃描,以確保新增的欄不會違反資料完整性。 SQL Server 2012 之前的版本不會執行這項檢查,這會讓資料定義語言(DDL)執行得更快。 不過,如果列大小超過允許的大小,此行為就會導致後續操作(例如列更新或收縮)失敗。

每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 查看 SQL Server 的最新累計更新:

其他相關資訊

  • 您可以使用 [啟動] 參數開啟 trace 標誌647。 如需詳細資訊,請參閱 資料庫引擎服務啟動選項

  • 您可以執行下列查詢(請將 <資料表名稱> 替換為實際的資料表名稱),在生產系統上測試特定資料表,然後規劃此問題的效果。 如果結果大於8060,您的表格會受此問題的制約。 此外,如果您已放下欄,您必須使用重建選項變更資料表。 重建資料表可以讓查詢傳回正確的結果。

    select  1+1+2 + 2 +  (case  when sum (case when leaf_offset < 0 then 1 else 0 end) > 0 then 2 else 0 end)  +  ( (count (*) + 7)/8 ) + count (case when leaf_offset < 0 then 1 else null end) * 2 +  sum( case when max_length=-1 then 24 else max_length end)  from sys.system_internals_partition_columns   col join sys.partitions par on col.partition_id = par.partition_id  where object_id = object_id ('<table name>')  and  index_id in (0,1) and partition_number =1 
  • 您可以考慮在您的應用程式經常將新資料行新增至資料表時,新增可變長度欄或稀疏列。 即使所有欄的總大小超過8060個位元組,也是僅限中繼資料的運算。

狀態

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

Need more help?

Want more options?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?
By pressing submit, your feedback will be used to improve Microsoft products and services. Your IT admin will be able to collect this data. Privacy Statement.

Thank you for your feedback!

×