У меня есть 2 базы данных с более чем 400 таблицами, для которых я должен рассчитать уровень заполнения.У меня есть цикл для расчета скорости заполнения для всех столбцов в таблице, но как я могу сделать это для всех таблиц в базе данных?Пожалуйста помоги!Я использую SQL Server.
Вот код для циклического перебора всех столбцов в таблице для расчета скорости заполнения -
DECLARE @Table NVARCHAR(max) = 'dbo.[TableName]'
,@MetaTable NVARCHAR(128) = '#TempTable'
,@ColumnName NVARCHAR(128)
,@Iterator INT = 1
,@SQL1 NVARCHAR(MAX)
SELECT c.NAME
,c.COLUMN_ID
,ROW_NUMBER() OVER (ORDER BY COLUMN_ID) AS RN
INTO #Cols
FROM SYS.COLUMNS c
WHERE c.OBJECT_ID = OBJECT_ID(@Table);
WHILE @Iterator <= (SELECT ISNULL(MAX(RN),0) FROM #Cols)
BEGIN
SET @ColumnName = (SELECT NAME FROM #Cols WHERE RN = @Iterator)
SET @SQL1 = 'INSERT INTO ' + @MetaTable + ' (Table_Name, Column_Name,
Fill_Rate) '
+ 'SELECT ''' + REPLACE(@Table,'DBO.','') + ''', ''' +
@ColumnName + ''', 100 * CONVERT(DECIMAL(8,3), SUM(CASE WHEN [' +
@ColumnName + '] IS NULL THEN 0 ELSE 1 END)) / COUNT(1) AS [' +
@ColumnName + '_fill]' + ' FROM ' + @Table
EXEC sp_executesql @SQL1
SET @Iterator += 1
END