ranio Ответов: 1

Как зациклить throguh таблиц в БД и установить union динамически в SQL server?


Я хочу перебирать таблицы в БД и динамически устанавливать объединение в Sql server.

Требуемый выходной запрос будет выглядеть следующим образом:
SELECT 'Account' ,(SELECT COUNT(*)  FROM Account  )

UNION ALL

--SELECT 'ACCOUNT_20140528_BKP' ,(SELECT COUNT(*)  FROM ACCOUNT_20140528_BKP  )

--UNION ALL

-- SELECT 'ACCOUNTBKP' ,(SELECT COUNT(*)  FROM ACCOUNTBKP  )

--UNION ALL
 SELECT 'AccountStatus' ,(SELECT COUNT(*)  FROM AccountStatus  )


Что я уже пробовал:

DECLARE @TableName Varchar(200)                                          
Declare @DateField Varchar(50)                                          
Declare @TableType char(1)      

DECLARE ARCHIVE CURSOR FOR SELECT TableName,DateField,TableType FROM dbo.Archive_config
              
OPEN ARCHIVE fetch next from ARCHIVE into @TableName, @DateField,@TableType                                            
                                            
WHILE @@FETCH_STATUS = 0                                          
BEGIN     

DECLARE @query AS VARCHAR(MAX)='SELECT '+@TableName+' AS Val'
DECLARE @query1 AS VARCHAR(MAX)='SELECT '+@TableName+' AS Val'

PRINT (@query+' UNION  '+@query1) 
--EXEC(@query+' UNION ALL '+@query1) 

END

1 Ответов

Рейтинг:
2

Richard Deeming

SQL SERVER - как эффективно найти количество строк каждой таблицы в базе данных? - SQL Authority с Pinal Dave[^]

Все, что вам нужно сделать, это отфильтровать этот запрос, чтобы вернуть только детали для нужных вам таблиц:

SELECT
    SCHEMA_NAME(T.schema_id) As SchemaName,
    T.name As TableName,
    SUM(P.rows) As TotalRowCount
FROM
    sys.tables As T
    INNER JOIN sys.partitions As P
    ON P.object_id = T.object_id
    And P.index_id In (0, 1)
WHERE
    Exists
    (
        SELECT 1
        FROM dbo.Archive_Config As A
        WHERE A.TableName = T.Name
    )
GROUP BY
    SCHEMA_NAME(T.schema_id),
    T.name
;