Запрос T-SQL для суммирования числовых полей в SQL Server 2000 дБ - PullRequest
0 голосов
/ 13 мая 2009

У меня есть SQL Server 2000 db, и я хотел бы получить сводную информацию для всех числовых полей, содержащихся в пользовательских таблицах базы данных.

Я могу получить имена, типы данных и размеры с помощью следующего запроса:

SELECT  t.name AS [TABLE Name],
c.name AS [COLUMN Name],
p.name AS [DATA Type],
p.length AS [SIZE]
FROM dbo.sysobjects AS t
JOIN dbo.syscolumns AS c
ON t.id=c.id
JOIN dbo.systypes AS p
ON c.xtype=p.xtype
WHERE t.xtype='U'
and p.prec is not null

Как я могу пойти еще дальше, а также перечислить среднее значение, содержащееся в каждом поле?

Можно ли это сделать с помощью подзапроса или мне нужно поместить результат этого запроса в курсор и перебрать второй запрос на выборку для каждого столбца?

Ответы [ 2 ]

1 голос
/ 13 мая 2009

Мое лучшее и быстрое предположение - использование курсора:

DECLARE @Table varchar(80)
DECLARE @Column varchar(80)
DECLARE @Sql varchar(300)

DECLARE fields CURSOR FORWARD_ONLY
FOR SELECT t.name AS [Table], c.name AS [COLUMN]
FROM dbo.sysobjects AS t
JOIN dbo.syscolumns AS c ON t.id=c.id
JOIN dbo.systypes AS p ON c.xtype=p.xtype
WHERE t.xtype='U'
  and p.name = 'int'
  and p.prec is not null

OPEN fields

FETCH NEXT FROM fields 
INTO @Table, @Column

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @sql = 'SELECT ''' + @Table + '.' + @Column + ''', Avg(' + @Column+ ') FROM ' + @Table
    EXEC(@Sql)

    FETCH NEXT FROM fields 
    INTO @Table, @Column

END
CLOSE fields
DEALLOCATE fields

Временная таблица тоже должна работать нормально. Вы также можете добавить значения Min () и Max (). Надеюсь, это поможет

0 голосов
/ 13 мая 2009

Мне кажется, вам нужен инструмент для профилирования. Вы можете использовать Visual Studio 2008 Database Edition или альтернативу с открытым исходным кодом, такую ​​как DataCleaner .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...