1. 程式人生 > >sql Server超過了每行的最大位元組數(8060)的原因和解決辦法

sql Server超過了每行的最大位元組數(8060)的原因和解決辦法

一、現象
    出現這種錯誤都發生在SQL語句建表時,錯誤提示:

    "警告: 已建立表 'XXXX,但其最大行大小(10438)超過了每行的最大位元組數(8060)。如果結果行長度超過 8060 位元組,則此表中行的 INSERT 或 UPDATE 將失敗。"
 
二、原因

為什麼說每行的最大長度是8096位元組?    

因為在SQL SERVER中,記錄Record是順序存放在資料頁中的,每一個數據頁的可儲存空間最大為8096位元組(8K-頁頭的96位元組,8192-96=8096),而SQL Server中行是不能跨資料頁的。

因此,如果你的建表語句中可變長度列的總長度超過了8096位元組,就意味著SQL Server的資料頁都裝不下這條記錄了,系統當然就會提示錯誤。

三、解決
    知道問題的原因了,解決辦法相對就簡單了!
    1、修改你建表語句中相應的列的資料型別或長度(如將nvarchar格式改成text),讓可變長度列的加和小於8060。這樣可以徹底避免出現上述錯誤發生,當然上述的錯誤並不是必然出現。
    2、在絕大多數情況下不會出現各列長度超過行限制的時候(這個需要根據儲存的資料的情況自行判斷),你也可以忽略這個提示,這並不會必然影響到你正常的操作。