SQLSERVER建表最大行超每行最大字節(jié)數(shù)的解決方法
如果SQLSERVER建表時(shí),其***行的大小超過了每行的***字節(jié)數(shù)(8060),應(yīng)該如如何進(jìn)行處理呢?
一般出現(xiàn)這種現(xiàn)象都是適用sql文件在查詢分析器里建庫的時(shí)候,現(xiàn)象一般都是提示:
已創(chuàng)建表 'xxxx',但其***行大?。?0438)超過了每行的***字節(jié)數(shù)(8060)。如果結(jié)果行長度超過 8060 字節(jié),則此表中行的 Insert 或 Update 將失敗。
其中xxxx是你的建的表名,10438是SQLSERVER建表語句中可變長度列(如 nvarchar 或 varbinary)的總長度,8060是SQL Server對(duì)行長度的***限制。
原因
其實(shí)把上面三個(gè)概念搞清楚,警告的原因就應(yīng)該清楚了,就是因?yàn)槟愕慕ū碚Z句中可變長度列的總長度超過了SQL Server對(duì)行***長度的限制8060。如果每一行中數(shù)據(jù)的總長度不超過8060 字節(jié),就仍可以向表中插入行。但是如果數(shù)據(jù)超過8060 字節(jié),因此系統(tǒng)提示你就會(huì)出現(xiàn)插入或更新操作失敗。
錯(cuò)誤提示:
服務(wù)器:信息 511,級(jí)別 16,狀態(tài) 1,第 5 行
無法創(chuàng)建大小為 的行,該值大于允許的***值 8060。
語句已終止。
舉個(gè)例子:比如我總共有10塊錢,買A東西可能花1-5塊,買B東西可能花2-3塊,買C東西可能花3-6塊,那我在做預(yù)算的時(shí)候就要提醒自己,如果ABC三個(gè)東西都要花上限的錢,那我的錢可就不夠了,因?yàn)?+3+6=14 >10,雖然可能我只花了1+2+3=6塊錢就把ABC全買了。
解決
知道問題的原因了,解決辦法相對(duì)就簡單了!
1、修改SQLSERVER建表語句中相應(yīng)的列的數(shù)據(jù)類型或長度(如將nvarchar格式改成text),讓可變長度列的加和小于8060。這樣可以徹底避免出現(xiàn)上述錯(cuò)誤發(fā)生,當(dāng)然上述的錯(cuò)誤并不是必然出現(xiàn)。
2、在絕大多數(shù)情況下不會(huì)出現(xiàn)各列長度超過行限制的時(shí)候(這個(gè)需要根據(jù)存儲(chǔ)的數(shù)據(jù)的情況自行判斷),你也可以忽略這個(gè)提示,這并不會(huì)必然影響到你正常的操作。
【編輯推薦】