GVKun编程网logo

sql-server – 如何从mssql中的sp_spaceused查询中获取所选字段(sql 获取指定字符位置)

7

如果您对sql-server–如何从mssql中的sp_spaceused查询中获取所选字段感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于sql-server–如何从mss

如果您对sql-server – 如何从mssql中的sp_spaceused查询中获取所选字段感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于sql-server – 如何从mssql中的sp_spaceused查询中获取所选字段的详细内容,我们还将为您解答sql 获取指定字符位置的相关问题,并且为您提供关于PCB MS SQL SERVER版本管控工具source_safe_for_sql_server、sp_spaceused (Transact-SQL)、sp_spaceused – 如何在SQL中的所有表中测量GB的大小、SQL Server利用sp_spaceused如何查看表记录存在不准确的情况的有价值信息。

本文目录一览:

sql-server – 如何从mssql中的sp_spaceused查询中获取所选字段(sql 获取指定字符位置)

sql-server – 如何从mssql中的sp_spaceused查询中获取所选字段(sql 获取指定字符位置)

对于我的查询

exec sp_spaceused ‘tablbename’

它回来了

名字|行|保留|数据|索引大小|没用过

但是,我只需要保留字段.

解决方法

试试这个,但我希望有更好的方法
DECLARE @spaceUsed TABLE (
    name varchar(255),rows int,reserved varchar(50),data varchar(50),index_size varchar(50),unused varchar(50))

INSERT INTO @spaceUsed
exec sp_spaceused 'YOUR_TABLE'

SELECT reserved FROM @spaceUsed

PCB MS SQL SERVER版本管控工具source_safe_for_sql_server

PCB MS SQL SERVER版本管控工具source_safe_for_sql_server

PCB由于业务关系复杂,业务触发一个事件时,可能需与数据库多个表进行关连处理才能拿到数据结果,

而表关连并不是简单的关连,实际是要进行大量数据筛选,逻辑判断,转换等过程。。。这个过程是复杂的

想一想,如果将大量数据传到客户端处理,这宽带压力也是挺大的,所以折中选择放到有部份业务逻辑放在存储过程处理了。

但这样一来,存储过程修改无法追溯了,在这里介绍一款工具,管理存储过程修改追溯,挺实用的。呵呵

 

一.SQL SERVER版本管制工具下载地址

       source_safe_for_sql_server.zip

 

二.主要应用场景:

        由于存储过程与函数修改都是立即生效,主要用于存储过程或函数变更追溯

 

三.数据库增加版本控制操作步聚

   

 

四.增加版本控制后,对应的数据库右键就多出签入,签出等功能了

 

五.测试存储过程修改后,差异对比功能

sp_spaceused (Transact-SQL)

sp_spaceused (Transact-SQL)

sp_spaceused (Transact-SQL)

显示行数、保留的磁盘空间以及当前数据库中的表、索引视图或 Service Broker 队列所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间。
Transact-SQL 语法约定  语法 sp_spaceused [[@objname =] ''objname'' ] [,[ @updateusage = ] ''updateusage'' ]  参数 [ @objname=] ''objname''
请求其空间使用信息的表、索引视图或队列的限定或非限定名称。仅当指定限定对象名称时,才需要使用引号。如果提供完全限定对象名称(包括数据库名称),则数据库名称必须是当前数据库的名称。
如果未指定 objname,则返回整个数据库的结果。
objname 的数据类型为 nvarchar (776),默认值为 NULL。[ @updateusage=] ''updateusage''
指示应运行 DBCC UPDATEUSAGE 以更新空间使用信息。当未指定 objnam

sp_spaceused – 如何在SQL中的所有表中测量GB的大小

sp_spaceused – 如何在SQL中的所有表中测量GB的大小

在 How to measure table size in GB in a table in SQL讨论之后,我正在寻找一种解决方案,使用存储过程sp_spaceused单独测量sql Server所有表所使用的空间.

解决方法

以下基本查询有效.它使用相同的算法获得与sp_spaceused相同的输出,但效率更高.请不要使用CURSOR sp_spaceused方法;绝对没有理由这样做.使用sp_spaceused的一个潜在问题是它应该是一个报告proc,因此输出是所有文本,而不是实际数字,并且将其重新分解为数字可能容易出错.

最好不要使用sys.tables或sp_msforeachtable,因为它们都排除了索引视图.

以下内容与sp_spaceused完全相同:

>包括XML索引,FullText索引,索引视图等.
>细分使用的数据与索引空间的信息

如果您需要它适用于所有数据库,它也可以很容易地适应它.

如果您需要按索引细分这些数据,我在DBA.StackExchange上调整了以下查询以回答这个问题:space usage on sys.allocation_units and sp_spaceused

;WITH extra AS
(   -- Get info for FullText indexes,XML Indexes,etc
    SELECT  sit.[object_id],sit.[parent_id],ps.[index_id],SUM(ps.reserved_page_count) AS [reserved_page_count],SUM(ps.used_page_count) AS [used_page_count]
    FROM    sys.dm_db_partition_stats ps
    INNER JOIN  sys.internal_tables sit
            ON  sit.[object_id] = ps.[object_id]
    WHERE   sit.internal_type IN
               (202,204,207,211,212,213,214,215,216,221,222,236)
    GROUP BY    sit.[object_id],ps.[index_id]
),agg AS
(   -- Get info for Tables,Indexed Views,etc (including "extra")
    SELECT  ps.[object_id] AS [ObjectID],ps.index_id AS [IndexID],SUM(ps.in_row_data_page_count) AS [InRowDataPageCount],SUM(ps.used_page_count) AS [UsedPageCount],SUM(ps.reserved_page_count) AS [ReservedPageCount],SUM(ps.row_count) AS [RowCount],SUM(ps.lob_used_page_count + ps.row_overflow_used_page_count)
                    AS [LobAndRowOverflowUsedPageCount]
    FROM    sys.dm_db_partition_stats ps
    GROUP BY    ps.[object_id],ps.[index_id]
    UNION ALL
    SELECT  ex.[parent_id] AS [ObjectID],ex.[object_id] AS [IndexID],0 AS [InRowDataPageCount],SUM(ex.used_page_count) AS [UsedPageCount],SUM(ex.reserved_page_count) AS [ReservedPageCount],0 AS [RowCount],0 AS [LobAndRowOverflowUsedPageCount]
    FROM    extra ex
    GROUP BY    ex.[parent_id],ex.[object_id]
),spaceused AS
(
SELECT  agg.[ObjectID],OBJECT_SCHEMA_NAME(agg.[ObjectID]) AS [SchemaName],OBJECT_NAME(agg.[ObjectID]) AS [TableName],SUM(CASE
                WHEN (agg.IndexID < 2) THEN agg.[RowCount]
                ELSE 0
            END) AS [Rows],SUM(agg.ReservedPageCount) * 8 AS [ReservedKB],SUM(agg.LobAndRowOverflowUsedPageCount +
            CASE
                WHEN (agg.IndexID < 2) THEN (agg.InRowDataPageCount)
                ELSE 0
            END) * 8 AS [DataKB],SUM(agg.UsedPageCount - agg.LobAndRowOverflowUsedPageCount -
            CASE
                WHEN (agg.IndexID < 2) THEN agg.InRowDataPageCount
                ELSE 0
            END) * 8 AS [IndexKB],SUM(agg.ReservedPageCount - agg.UsedPageCount) * 8 AS [UnusedKB],SUM(agg.UsedPageCount) * 8 AS [UsedKB]
FROM    agg
GROUP BY    agg.[ObjectID],OBJECT_SCHEMA_NAME(agg.[ObjectID]),OBJECT_NAME(agg.[ObjectID])
)
SELECT sp.SchemaName,sp.TableName,sp.[Rows],sp.ReservedKB,(sp.ReservedKB / 1024.0 / 1024.0) AS [ReservedGB],sp.DataKB,(sp.DataKB / 1024.0 / 1024.0) AS [DataGB],sp.IndexKB,(sp.IndexKB / 1024.0 / 1024.0) AS [IndexGB],sp.UsedKB AS [UsedKB],(sp.UsedKB / 1024.0 / 1024.0) AS [UsedGB],sp.UnusedKB,(sp.UnusedKB / 1024.0 / 1024.0) AS [UnusedGB],so.[type_desc] AS [ObjectType],so.[schema_id] AS [SchemaID],sp.ObjectID
FROM   spaceused sp
INNER JOIN sys.all_objects so
        ON so.[object_id] = sp.ObjectID
WHERE so.is_ms_shipped = 0
--so.[name] LIKE N''  -- optional name filter
--ORDER BY ??

SQL Server利用sp_spaceused如何查看表记录存在不准确的情况

SQL Server利用sp_spaceused如何查看表记录存在不准确的情况

前言

在之前写过一篇博客"关系数据库如何快速查询表的记录数",里面介绍了使用sp_spaceused查看表的记录数是否正确的问题,具体如下:

关于问题3:有多个索引的表,是否记录数会存在不一致的情况?
 
   答案:个人测试以及统计来看,暂时发现多个索引的情况下,sys.partitions中的rows记录数都是一致的。暂时没有发现不一致的情况,当然也不排除有特殊情况。
 
关于问题5: 分区表的情况又是怎么样?
 
   答案:分区表和普通表没有任何区别。
 
关于问题6:对象目录视图sys.partitions与sp_spaceused获取的表记录函数是否准确?
 
   答案:对象目录视图sys.partitions与sp_spaceused获取的表记录数是准确的。

但是,今天遇到一个问题,直接推翻了之前博客里面下的这个结论。如下截图所示,发现不同的索引的记录数不一样。所以问题3,应该这样回答:

    大部分情况下,sys.partitions中的rows记录数都是一致的。但是也有发现不同索引的rows不一致的情况

另外,也发现sp_spaceused 中返回的记录数跟SELECT COUNT(*) 不一致。但是从碎片,统计信息等各个方面都分析了一下,实在没有搞清楚什么原因会导致这种情况出现。在数据库找了一下,发现这样的情况非常少,但是确实也是存在的。特此记录一下

sp_spaceused ''dbo.spcecial_table'';
 
SELECT partition_id, object_id, index_id,row_count 
FROM sys.dm_db_partition_stats 
WHERE object_id= OBJECT_ID(''dbo.spcecial_table'')
 
 
 
 
SELECT object_id, index_id, rows FROM sys.partitions
WHERE object_id= OBJECT_ID(''dbo.spcecial_table'')
 
 
 
SELECT object_id, index_id, rows FROM sys.partitions
WHERE object_id= OBJECT_ID(''spcecial_table'');
 
 
SELECT COUNT(*) FROM spcecial_table

如下截图所示,sp_spaceused 获取的记录数为8718528, 但是SELECT COUNT(*)为8735537。

 

关于问题6:对象目录视图sys.partitionssp_spaceused获取的表记录函数是否准确?

  答案:对象目录视图sys.partitionssp_spaceused获取的表记录数是准确的。

正确答案:对象目录视图sys.partitionssp_spaceused获取的表记录数是大部分是准确的。但是也存在记录数不准确的情况。只是目前不清楚在什么场景下,会出现不准确的情况。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。

您可能感兴趣的文章:
  • sqlserver2008查看表记录或者修改存储过程出现目录名无效错误解决方法
  • SQL Server简单模式下误删除堆表记录恢复方法(绕过页眉校验)
  • SQL SERVER数据库表记录只保留N天图文教程

关于sql-server – 如何从mssql中的sp_spaceused查询中获取所选字段sql 获取指定字符位置的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于PCB MS SQL SERVER版本管控工具source_safe_for_sql_server、sp_spaceused (Transact-SQL)、sp_spaceused – 如何在SQL中的所有表中测量GB的大小、SQL Server利用sp_spaceused如何查看表记录存在不准确的情况等相关内容,可以在本站寻找。

本文标签: