所以我在这里有这个查询:
OPEN @getid
WHILE @@FETCH_STATUS = 0
Begin
FETCH NEXT
FROM @getid INTO @table, @funckey
set @query = '
select '''+@table+''' as Tab,
(SELECT COUNT(DISTINCT COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME= '''+@table+''') as Columns,
(SELECT COUNT(*) Lines
FROM '+@table+') as Lines
'
EXEC sp_executesql @query
FETCH NEXT
FROM @getid INTO @table, @funckey
END
因此,我试图将每个数据库表的名称,列数和行数放入同一结果表中,但是此方法通过迭代返回一个结果表。因此,我想知道如何连接这些行,而不是将每一行都放在自己的表中。
有没有办法让所有itérations饮食都在同一张桌子上?(为了清楚起见,我省略了一些变量声明行)
我试图将每个数据库表的名称,列数和行数放入同一结果表中,但是此方法通过迭代返回一个结果表。所以我想知道如何连接这些行,而不是将每一行都放在自己的表中。
如果您对行数的“好”估计感到满意,似乎根本就不需要CURSOR
。
SELECT s.name AS SchemaName,
t.name AS TableName,
c.Columns,
p.Rows
FROM sys.schemas s
JOIN sys.tables t ON s.schema_id = t.schema_id
CROSS APPLY (SELECT COUNT(*) AS Columns
FROM sys.columns c
WHERE c.object_id = t.object_id) c
CROSS APPLY (SELECT COUNT(*) AS Rows
FROM sys.partitions p
WHERE p.object_id = t.object_id
AND p.index_id IN (0,1)) p;