成人免费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技術棧公眾號

主站蜘蛛池模板: 精品久久影院 | 青青草av在线播放 | 福利精品| 欧美日韩成人影院 | 久久久久免费 | 天天看片天天干 | 网黄在线 | a在线视频| 国产精品我不卡 | 中文字幕一区二区三区乱码在线 | 日本成人中文字幕 | 中文久久 | 亚洲国产精品久久久久秋霞不卡 | 国产一区二区在线看 | 国产精品大全 | 欧美 中文字幕 | 成人在线视频网址 | 91视频免费在观看 | 亚洲综合资源 | 欧美一区二区在线免费观看 | 国产精品久久久久久久 | 欧美精品乱码久久久久久按摩 | 成人激情视频在线 | 国产美女福利在线观看 | 黄视频免费| 天堂av中文 | 91视频进入 | 黄色av网站在线观看 | 亚洲国产一区二区三区在线观看 | 欧美日韩国产在线观看 | 日日操夜夜操天天操 | 国产区在线免费观看 | 国产精品久久久久久婷婷天堂 | 在线观看免费av网站 | 狠狠色香婷婷久久亚洲精品 | 午夜影视| 国产午夜三级一区二区三 | 欧美一区二区三区在线观看视频 | 亚洲人成人一区二区在线观看 | 在线看片国产精品 | 国产精品日韩欧美一区二区 |