SQL Server行长度

use*_*826 6 sql-server stored-procedures

我试图通过执行以下存储过程来确定表的行长度(以字节为单位):

CREATE TABLE #tmp 
(
  [ID] int, 
  Column_name varchar(640), 
  Type varchar(640), 
  Computed varchar(640), 
  Length int, 
  Prec int, 
  Scale int, 
  Nullable varchar(640), 
  TrimTrailingBlanks varchar(640), 
  FixedLenNullInSource varchar(640), 
  Collation varchar(256)
)
INSERT INTO #tmp exec sp_help MyTable
SELECT SUM(Length) FROM #tmp
DROP TABLE #tmp
Run Code Online (Sandbox Code Playgroud)

问题是我不知道'sp_help'返回的表的表定义(数据类型等).

我收到以下错误:

Insert Error: Column name or number of supplied values does not match table definition.
Run Code Online (Sandbox Code Playgroud)

查看sp_help存储过程并没有给我任何线索.

插入sp_help结果的正确CREATE TABLE语句是什么?

小智 7

怎么这样做呢?

CREATE TABLE tblShowContig
(
    ObjectName CHAR (255),
    ObjectId INT,
    IndexName CHAR (255),
    IndexId INT,
    Lvl INT,
    CountPages INT,
    CountRows INT,
    MinRecSize INT,
    MaxRecSize INT,
    AvgRecSize INT,
    ForRecCount INT,
    Extents INT,
    ExtentSwitches INT,
    AvgFreeBytes INT,
    AvgPageDensity INT,
    ScanDensity DECIMAL,
    BestCount INT,
    ActualCount INT,
    LogicalFrag DECIMAL,
    ExtentFrag DECIMAL
)
GO

INSERT tblShowContig
EXEC ('DBCC SHOWCONTIG WITH TABLERESULTS')
GO

SELECT * from tblShowContig WHERE ObjectName = 'MyTable'
GO
Run Code Online (Sandbox Code Playgroud)


Joh*_*udy 0

我无法帮助您创建临时表来存储 sp_help 信息,但我可以帮助您计算行长度。查看这篇MSDN 文章;它可以帮助您根据字段长度、类型等进行计算。将其转换为 SQL 脚本可能不需要太多时间,您可以通过查询 sysobjects 等来重用。

编辑:

我正在修改我的提议,为其编写脚本。我的方法远没有 Vendoran 的方法那么容易。:)

顺便说一句,我收回之前所说的无法帮助处理临时表的话。我可以:你做不到。sp_help 输出七个行集,因此我认为您无法执行原始问题中最初描述的操作。我认为你不得不使用不同的方法来想出它。