2016-08-09 199 views

Antwort

1

Sie zum sysindexes Tabelle beitreten könnte eine Zeilenanzahl zu geben:

ALTER PROCEDURE abc (@table_name SYSNAME) 
AS 
BEGIN 

SELECT 
    t.name, 
    count(c.column_id) AS no_of_cols, 
    MAX(i.rows) AS no_of_rows 
FROM 
    sys.tables t 

    INNER JOIN sys.columns c 
    ON t.object_id = c.object_id 

    INNER JOIN sysindexes i 
    ON i.id = t.object_id  
WHERE 
    t.name = @table_name  
GROUP BY 
    t.name; 

END 

N. B. Diese Methode betrachtet Tabellenstatistiken und könnte möglicherweise ungenau sein. Sie können Statistiken mithilfe von DBCC UPDATEUSAGE(db) WITH COUNT_ROWS wiederherstellen.

+0

Superb ... Gut gemacht .... – DineshDB

1

Das sollte Ihnen helfen:

ALTER PROCEDURE abc (@TableName SYSNAME) 
AS 
BEGIN 

DECLARE @SizeTable Table 
(
name Varchar(100), 
rows bigint, 
reserved Varchar(30), 
data Varchar(30), 
index_size Varchar(30), 
unused Varchar(30) 
) 

INSERT INTO @SizeTable EXEC sp_spaceused @TableName 

;With cteColumns as 
(
    select COUNT(*) as ColumnsCount from sys.columns 
    WHERE object_id = OBJECT_ID(@TableName) 
) 

SELECT * FROM @SizeTable as st 
CROSS JOIN cteColumns 
END