成人免费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

2010-09-16 15:25:46

SqlServer20

2010-11-09 15:30:01

Sql server時

2014-07-07 10:58:22

SQL Server

2011-08-15 13:20:07

SQL Server唯一索引視圖

2010-09-16 16:06:01

sql server表

2011-08-15 11:24:46

SQL Server事務

2010-07-23 14:11:18

SQL Server

2011-08-01 16:10:00

SQL Server

2010-10-19 16:40:34

sql server掛

2010-07-22 16:02:29

2021-06-10 13:50:55

代碼開發數據庫

2010-06-28 09:53:11

SQL Server數

2010-07-15 13:54:47

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品在线一区二区三区 | 青青草在线视频免费观看 | 久久99久久99 | 日韩欧美精品在线播放 | 精品乱码一区二区 | 日韩一区二区视频 | 成人片免费看 | 亚洲天堂影院 | 在线视频99| 亚洲国产免费 | 一级黄色影片在线观看 | 日本精品在线观看 | 国产目拍亚洲精品99久久精品 | 天天久久| 毛片一级片 | 日韩精品一区二区三区在线播放 | 91综合网 | 午夜tv免费观看 | 中文字幕 在线观看 | 精品成人 | 久久激情五月丁香伊人 | 888久久久 | 欧美精品一区二区三区四区 在线 | 特级a欧美做爰片毛片 | 97福利在线| 精品久久久久久久久亚洲 | 玖玖视频| 欧美精品1区2区 | 艹逼网| 高清国产午夜精品久久久久久 | 在线观看视频一区 | 青青草av网站 | 亚洲精品成人网 | 色综合美女 | 91精品久久久久久久久中文字幕 | 国产午夜精品久久 | 黄色毛片在线播放 | 亚洲一区二区免费电影 | 午夜天堂精品久久久久 | 免费观看黄色一级片 | 中文字幕在线一区 |