none
请问这个SQL语句是怎样的 RRS feed

  • 问题

  • 今晚在看这篇文章

    http://www.cnblogs.com/trams/archive/2010/09/11/1823727.html

    SQL Server2008存储结构之堆表、行溢出

    他里面有一个例子

    SELECT * FROM testheap
    --查询该表的IAM页面地址和首页地址
    SELECT total_pages,used_pages,data_pages,
           --first_page,root_page,first_iam_page,
           testdb.dbo.f_get_page(first_page) first_page_address,
           testdb.dbo.f_get_page(root_page) root_address,
           testdb.dbo.f_get_page(first_iam_page) IAM_address
      FROM sys.system_internals_allocation_units
    WHERE container_id IN (SELECT partition_id FROM sys.partitions 
                 WHERE object_id in (SELECT object_id  FROM sys.objects
                                                  WHERE name IN ('testheap')))

    查询表的页面分配情况

    即SQL Server为该表分配了总计25个页面,实际使用了18个页面,扣除1个IAM管理页面,实际数据页面为17个,IAM管理页面地址为第一个文件的第119页面,数据页面的第一个页面为第一个文件的第224页面。

           testdb.dbo.f_get_page(first_page) first_page_address,
           testdb.dbo.f_get_page(root_page) root_address,
           testdb.dbo.f_get_page(first_iam_page) IAM_address

    SQL里面好像没有这几个函数,晕死了,那些人只顾转载别人的文章,自己又不实验一下

    希望各位大侠给出正确SQL 可以得出图中格式的结果


    给我写信: QQ我:点击这里给我发消息

    2013年1月19日 14:15

答案

  • jackie shen大侠感谢您提供文章地址,但是我发现博客园里的那篇文章也是转载于这篇文章

    比较无奈


    给我写信: QQ我:点击这里给我发消息


    这个是自定义函数啊,里面已经写的很清楚了,把那个函数的定义执行一下就可以了。


    Please click the Mark as Answer button if a post solves your problem!

    2013年1月21日 1:02

全部回复

  • You just copied it from somewhere.
    2013年1月19日 21:38
  • 你知道吗?rmiao大侠

    给我写信: QQ我:点击这里给我发消息

    2013年1月20日 2:41
  • 你搜索一下就可以了

    http://tech.it168.com/a2010/0920/1106/000001106247_all.shtml



    Please click the Mark as Answer button if a post solves your problem!

    2013年1月20日 6:07
  • jackie shen大侠感谢您提供文章地址,但是我发现博客园里的那篇文章也是转载于这篇文章

    比较无奈


    给我写信: QQ我:点击这里给我发消息

    2013年1月20日 14:30
  • jackie shen大侠感谢您提供文章地址,但是我发现博客园里的那篇文章也是转载于这篇文章

    比较无奈


    给我写信: QQ我:点击这里给我发消息


    这个是自定义函数啊,里面已经写的很清楚了,把那个函数的定义执行一下就可以了。


    Please click the Mark as Answer button if a post solves your problem!

    2013年1月21日 1:02
  • 最近熬夜熬多了,不好意思 jackie shen大侠

    --在构建例子之前我们首先需要创建一个把地址转换为具体页码的函数。
    USE [pratice]
    GO
    CREATE FUNCTION [dbo].f_get_page(@page_num BINARY(6))
    RETURNS VARCHAR(11)
    AS
    BEGIN
    RETURN(CONVERT(VARCHAR(2),(CONVERT(INT,SUBSTRING(@page_num,6,1))*POWER(2,8))+
            (CONVERT(INT,SUBSTRING(@page_num,5,1))))+':'+
            CONVERT(VARCHAR(11),
            (CONVERT(INT,SUBSTRING(@page_num,4,1))*POWER(2,24))+
            (CONVERT(INT,SUBSTRING(@page_num,3,1))*POWER(2,16))+
            (CONVERT(INT,SUBSTRING(@page_num,2,1))*POWER(2,8))+
            (CONVERT(INT,SUBSTRING(@page_num,1,1)))))
    END
    --根据master.sys.objects构建一张叫testIAM的数据表
    SELECT * INTO testIAM FROM master.sys.objects    
    --然后我们根据之前所知晓的信息,获取testIAM对象的IAM地址,并根据f_get_page函数将地址转换为相应的页面
    USE [pratice]
    GO
    SELECT total_pages,used_pages,data_pages,
           first_page,root_page,first_iam_page,
           dbo.f_get_page(first_page) first_page_address,
           dbo.f_get_page(root_page) root_address,     
           dbo.f_get_page(first_iam_page) IAM_address
      FROM sys.system_internals_allocation_units
    WHERE container_id IN (SELECT partition_id FROM sys.partitions 
                             WHERE object_id in (SELECT object_id  FROM sys.objects
                                                  WHERE name IN ('test23')))


    给我写信: QQ我:点击这里给我发消息

    2013年1月21日 2:49