nchar--一個字符佔到兩個字節,轉為k單位;這是固定長度

解决方案 »

  1.   

    exec sp_MSforeachtable @command1="sp_spaceused 'table_2019'"
    exec sp_MSforeachtable @command1="sp_spaceused 'table_2020'"name       rows        reserved           data               index_size         unused 
    Table_2019 20          144 KB             80 KB              16 KB              48 KB Table_2020 20          208 KB             160 KB             16 KB              32 KB
      

  2.   

    简单点的讲,Table_2019的一个数据页上可以放2条记录
    Table_2020的一个数据页上只能放1条记录.所以Table_2020的数据页的需求数是Table_2019的两倍。
      

  3.   

    实验了一下,应该是这样,每个数据页是8k也就是1024*8 =8192 bytes.
    其中要有存放页头,行偏移量等等其他'控制数据'的空间,实际能放用户数据的空间应该就是8076到8080之间.
    (根据实验结果推测的,nchar的一个字符是两个字节,2019*2*2=8038,2020*2*2=8080).
    所以一个8k的页是放不下两个nchar(2020)的.
      

  4.   

    上边有点写错了,怎不能修改呢...
    (根据实验结果推测的,nchar的一个字符是两个字节,2019*2*2=8076,2020*2*2=8080). 
      

  5.   

    严格按照联机帮助上的算法算一下就知道了, 第一个表2记录/而, 第二个1记录/页DECLARE
        @Num_Cols int, -- 总列数(固定长度和可变长度)
        @Fixed_Data_Size int, --= 所有固定长度列的总字节大小
        @Num_Variable_Cols int, -- = 可变长度列的数量
        @Max_Var_Size int --= 所有可变长度列的最大总字节大小
    SELECT
        @Num_Cols = 1,
        @Fixed_Data_Size = 2019 * 2,
        @Num_Variable_Cols = 0,
        @Max_Var_Size = 0
        
    -- 保留行中称为空位图的部分以管理列的为空性。计算大小:
    DECLARE
        @Null_Bitmap int
    SELECT
        @Null_Bitmap = 2 + ((@Num_Cols + 7) / 8)--只应使用该表达式的整数部分。而去掉其余部分。
    --计算可变长度数据的大小:
    DECLARE
        @Variable_Data_Size int
    --如果没有可变长度列,请将 Variable_Data_Size 设置为 0。
    SELECT
        @Variable_Data_Size = 0--计算总的行大小:
    DECLARE
        @Row_Size int
    SELECT
        @Row_Size = @Fixed_Data_Size + @Variable_Data_Size + @Null_Bitmap + 4--公式中的值 4 是数据行的行标题开销。
    --下一步,计算每页的行数(每页有 8096 可用字节):SELECT
        Rows_Per_Page = 8096 / (@Row_Size + 2)
      

  6.   

    那么:在 SQL Server 2000 中,一行内最多包含的数据量是 8060 字节不是都超过了吗?望解释一下