Количество строк во всех таблицах базы данных Sybase

У меня есть имя базы данных ATs. В этой базе 150 таблиц. Я хочу создать инструкцию, которая возвращает количество строк и столбцов во всех таблицах базы данных.

Я создал процедуру хранения для SQL SERVER 2008, но не знаю, как написать этот сценарий для Sybase.


person Abhishek    schedule 10.07.2013    source источник


Ответы (2)


Sybase ASA имеет набор системных таблиц, предоставляющих информацию о структуре вашей базы данных. Вас интересуют две таблицы: SYSTABLE (все таблицы) и SYSCOLUMN (все столбцы).

Я попробовал эту быструю и грязную хранимую процедуру, которая работает для меня (на довольно старой ASA версии 8!). Он создает временную таблицу и курсор для перебора всех таблиц. Для каждой таблицы имя таблицы, количество столбцов и количество строк вставляются во временную таблицу и, наконец, возвращаются.

(Подсказка: tablefilter позволяет вернуть только подмножество всей базы данных, если у вас много таблиц.)

CREATE PROCEDURE Usr_TableStats(in par_tablefilter char(100))
RESULT (tablename varchar(255), number_of_cols int, number_of_rows int)
BEGIN

    declare err_notfound exception for sqlstate value '02000';
    declare @table_id  integer;
    declare @tablename varchar(100);
    declare @cols      integer;
    declare @sql       varchar(300);

    declare tables no scroll cursor for select table_id, table_name from sys.systable where table_type = 'BASE' and table_name like par_tablefilter || '%' order by table_name;

    create table #tablestats (
        tablename       varchar(100) not null,
        number_of_cols  int not null default 0,
        number_of_rows  int not null default 0
    );

    open tables;

    LoopTables: loop

        fetch next tables into @table_id, @tablename;

        if sqlstate = err_notfound then
            leave LoopTables
        else
            SELECT COUNT(column_id) INTO @cols FROM SYSCOLUMN WHERE table_id = @table_id;
            set @sql= 'INSERT INTO #tablestats SELECT ''' || @tablename || ''', ' || @cols || ', COUNT(*) FROM ' || @tablename || ';';
            EXECUTE IMMEDIATE WITH QUOTES @sql;
        end if

    end loop LoopTables;

    close tables;

    SELECT tablename, number_of_cols, number_of_rows FROM #tablestats;

END

Назовите это в iSQL следующим образом:

CALL Usr_TableStats('%'); -- all tables
CALL Usr_TableStats('ADDRESS%'); -- only tables starting with ADDRESS
person Oliver Jakoubek    schedule 11.07.2013

sys.systable и sys.syscolumn должны предоставить вам информацию:

   Select st.table_name, 
    st.count as row_count,
    col_count = (SELECT count(*) FROM sys.syscolumn where table_id = st.table_id)
    from SYS.SYSTABLE st where st.creator <> 0 and st.count > 0
    order by st.table_name
person Kman    schedule 05.05.2014