T- SQL: Можете ли вы объединить результаты запроса из al oop в одну таблицу? - PullRequest
0 голосов
/ 17 апреля 2020

Итак, у меня есть этот запрос прямо здесь:

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

Итак, я пытаюсь получить имя, количество столбцов и количество строк для каждой таблицы базы данных в одной итоговой таблице, но этот метод возвращает одну таблицу результатов путем итерации. Поэтому мне интересно, как я могу объединить строки вместо того, чтобы каждая из них была в отдельной таблице.

Есть ли способ, чтобы все итерации располагались в одной таблице? (я упустил некоторые строки объявления переменных для большей ясности)

1 Ответ

0 голосов
/ 17 апреля 2020

Если мое чтение этого комментария правильное:

Я пытаюсь получить имя, количество столбцов и количество строк для каждой таблицы базы данных в одной итоговой таблице, но этот метод возвращает одну таблицу результатов путем итерации. Поэтому мне интересно, как я могу объединить строки вместо того, чтобы каждая из них была в своей таблице.

Похоже, вам вообще не нужно 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;
...