成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server表最小行的一個糾結問題

數據庫 SQL Server 數據庫運維
昨天一個同事突然問我,說他在SQL 2000數據庫創建如下表的時候,突然碰到了下面一條警告信息。The table 'Log' has been created but its maximum row size (17159) exceeds the maximum number of bytes per row (8060).

昨天一個同事突然問我,說他在SQL 2000數據庫創建如下表的時候,突然碰到了下面一條警告信息。SQL腳本和警告信息如下:

  1. IF OBJECT_ID(N'Log'IS NULL 
  2. BEGIN 
  3. CREATE TABLE Log  
  4. (  
  5. [Date] DATETIME,  
  6. [Thread] NVARCHAR(255),  
  7. [Level] NVARCHAR(50),  
  8. [Logger] NVARCHAR(255),  
  9. [Message] NVARCHAR(4000),  
  10. [Exception] NVARCHAR(4000)  
  11. )  
  12. END 
  13. ELSE 
  14. PRINT('該表已經存在,請檢查數據庫');  
  15. GO  
  16. Warning: 
  17. The table 'Log' has been created but its maximum row size (17159) exceeds the maximum number of bytes per row (8060). 
  18. INSERT or UPDATE of a row in this table will fail if the resulting row length exceeds 8060 bytes. 

我以前也沒有遇見過這樣的警告信息,當時我在SQL SERVER 2000 下面執行這段腳本,果然有這個警告信息,還有就是為什么Maximun ROW SIZE 是17159?;當我在SQL SERVER 2005 下面執行這段腳本卻沒有警告信息出現,難道SQL SERVER 2005 與SQL SERVER 2000在存貯機制上面有什么不同?在搞清楚這些問題前,我們先來看看其它的一些相關問題,就是SQL SERVER 2000/2005中***數據行都是8060字節(對定長數據而言), 其中SQL SERVER 2000中可以使用的大小為8039字節, 而SQL SERVER 2005可以使用的大小為8053字節。我們可以從下面的腳本中實驗一下(SQL SERVER 2005)

  1. CREATE TABLE TEST  
  2. (  
  3. FIELD1 CHAR(4000),  
  4. FIELD2 CHAR(4000),  
  5. FIELD3 CHAR(53)  
  6. )  
  7. CREATE TABLE TEST1  
  8. (  
  9. FIELD1 CHAR(4000),  
  10. FIELD2 CHAR(4000),  
  11. FIELD3 CHAR(54)  

最小行大小8061 = 4000 + 4000 + 54 + 7(內部開銷)。下面我們改變下上面腳本的數據類型,如下所示,看看在SQL SERVER 2005下的情況

  1. IF OBJECT_ID(N'Log'IS NULL 
  2. BEGIN 
  3. CREATE TABLE Log  
  4. (  
  5. [Date] DATETIME,  
  6. [Thread] CHAR(255),  
  7. [LevelCHAR(50),  
  8. [Logger] CHAR(255),  
  9. [Message] CHAR(4000),  
  10. [Exception] CHAR(4000)  
  11. )  
  12. END 
  13. ELSE 
  14. PRINT('該表已經存在,請檢查數據庫');  
  15. GO 

那么最小行8575是怎么算出來的呢,我們先看這張經典數據行結構圖(引自Inside SQL SERVER)

其實就是8 + 255 + 50 + 255 + 4000 + 4000 = 8568 + 7 = 8575 其中的7個字節是這樣來的

  1. Status Bits A 1  
  2. Status Bits B 1  
  3. Length of fixed-length ........ 2  
  4. number of columns 2  
  5. Null bitmap 1 bit for each column (6/8)1 

由于表里面沒有變長字段,所以其它與變長相關的字節為0 所以為7。 那么接下來我們看看開篇的問題為什么 maximum row size (17159),

8 + 255* 2 + 50 * 2 + 255 * 2 + 4000 * 2 + 4000 *2 = 17128

1 + 1 + 2 + 2 + 1 + 2 + 2* 5 = 19

那么17128 + 19 = 17147 但是結果是17159,有點不明,查了很多資料也沒搞清楚,這個17159 是怎么算出來的,呵呵,希望高手來解答

原文鏈接:http://www.cnblogs.com/kerrycode/archive/2011/05/19/2050589.html

【編者推薦】

  1. 思科推新數據中心解決方案支持SQL Server
  2. 數據庫日常維護常用的腳本部分收錄
  3. 云端數據庫:微軟SQL Azure及其應用場景
  4. SQL點滴之收集SQL Server線程等待信息
責任編輯:艾婧 來源: 博客園
相關推薦

2012-04-14 21:11:46

iPhone 5

2021-01-18 05:23:14

SQL 排序Server

2011-05-06 14:19:29

ExcelSQL Server

2011-04-13 14:20:52

SQL Server主鍵

2015-07-20 17:05:38

SQL ServerNULL值

2009-04-20 15:54:04

SQL Server重復行

2010-06-28 12:46:09

SQL Server

2014-07-07 10:58:22

SQL Server

2011-08-15 13:20:07

SQL Server唯一索引視圖

2010-11-09 15:30:01

Sql server時

2010-09-16 15:25:46

SqlServer20

2010-09-16 16:06:01

sql server表

2011-08-01 16:10:00

SQL Server

2011-08-15 11:24:46

SQL Server事務

2010-10-19 16:40:34

sql server掛

2010-07-23 14:11:18

SQL Server

2021-06-10 13:50:55

代碼開發數據庫

2010-06-28 09:53:11

SQL Server數

2015-04-01 09:57:48

2010-06-28 14:13:18

SQL Server實
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产亚洲精品久久情网 | 亚洲午夜网 | 国产精品日韩一区 | 精品国产乱码一区二区三区 | 久久夜视频 | 国产一区二区三区四区在线观看 | 久久精品国产亚洲a | 欧美成人精品一区二区男人看 | 在线观看成人小视频 | 成人片免费看 | 欧美综合在线视频 | 午夜免费看视频 | 国产色网站 | 毛片网在线观看 | 亚洲大片一区 | 久久人 | 黄网站在线观看 | 国产精品高潮呻吟久久av黑人 | 久久久久久国产精品免费免费男同 | 日韩视频精品在线 | 亚洲精品1 | 91精品国产91久久久久久密臀 | 亚洲精品一区二区三区蜜桃久 | 岛国二区 | 97碰碰碰 | 在线欧美一区 | 色综合久久久久 | 亚洲精品电影在线观看 | 亚洲精品视频导航 | 久久精品无码一区二区三区 | 欧美在线a| 精品一区二区三区av | 亚洲精品免费在线 | 久久精品视频在线免费观看 | 日韩和的一区二在线 | 精品国产一区二区三区观看不卡 | 日韩毛片网| 日韩精品成人 | 精品久久久久一区二区国产 | 午夜精品三区 | 久久91|