T-SQL:您可以将查询结果从循环连接到单个表中吗?

问题描述 投票:-1回答:1

所以我在这里有这个查询:

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饮食都在同一张桌子上?(为了清楚起见,我省略了一些变量声明行)

sql sql-server tsql ssms
1个回答
0
投票
如果我对本评论的阅读正确:

我试图将每个数据库表的名称,列数和行数放入同一结果表中,但是此方法通过迭代返回一个结果表。所以我想知道如何连接这些行,而不是将每一行都放在自己的表中。

如果您对行数的“好”估计感到满意,似乎根本就不需要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;

© www.soinside.com 2019 - 2024. All rights reserved.