Pull to refresh

Comments 11

Спасибо за статью, некоторые запросы сильно работу облегчат.
Запросы полезные, жаль про статистики ничего не написано.
Думаю, статья и так достаточно большая, увеличивать ее еще — это значит делать абсолютно нечитабельной. Лучше найти полезные статьи про статистики на английском, и также их перевести. Про некоторые статистики статью переводил я — посмотрите, может быть, будет интересно.
Намного удобнее использовать T-SQL для генерирования скрипта. Скрипт, приведённый ниже, сгенерирует набор инструкций T-SQL для получения количества строк в каждой таблице текущей базы данных. Просто выполните его, скопируйте результат в новое окно и запустите.

Намного удобнее использовать T-SQL для генерирования скрипта. Скрипт, приведённый ниже, сгенерирует набор инструкций T-SQL для получения количества строк в каждой таблице текущей базы данных. Просто выполните его, скопируйте результат в новое окно и запустите.
SELECT  'Select ''' + DB_NAME() + '.' + SCHEMA_NAME(SCHEMA_ID) + '.'
        + LEFT(o.name, 128) + ''' as DBName, count(*) as Count From ' + o.name
        + ';' AS ' Script generator to get counts for all tables'
FROM    sys.objects o
WHERE   o.[type] = 'U'
ORDER BY o.name;

GO



Почему бы не сделать так:
declare @sql nvarchar(max);
set @sql = '';

SELECT  @sql = @sql + 'Select ''' + DB_NAME() + '.' + SCHEMA_NAME(SCHEMA_ID) + '.'
        + LEFT(o.name, 128) + ''' as DBName, count(*) as Count From ' + SCHEMA_NAME(SCHEMA_ID) + '.' + o.name
        + ';' + char(13) + char(10)
FROM    sys.objects o
WHERE   o.[type] = 'U'
ORDER BY o.name;

exec (@sql)
GO


Примечание переводчика: у меня запрос не работал, добавил схему к имени таблицы.

Совершенно верно, запрос сработает только для объектов внутри схемы по-умолчанию — dbo, или внутри схемы текущего пользователя. Для других схем их имя надо указать явно. Более того, все имена объектов нужно заключать в квадратные скобки — я могу создать таблицу с именем ORDER, но выбрать из нее таким запросом: «select * from order» я ничего не смогу, надо писать так: «select * from [order]».

Примечание переводчика: курсор не отработает, если у вас в списке есть базы данных с состоянием, отличным от ONLINE.


Нужно всего лишь поправить запрос для курсора:

SELECT  *
    FROM    sys.databases
    WHERE    Name NOT IN ( 'master', 'model', 'msdb', 'tempdb',
                            'distribution' )
                            and state_desc = 'ONLINE'
    ORDER BY Name; 


Ну и еще вагон и маленькая тележка замечаний к коду автора статьи, но, тем не менее, статья весьма полезна для начинающих админов БД, и перевод ее на русский тоже весьма полезен.
Почему бы не сделать так:

Я думаю автор не уделял особого внимания этому запросу. Всё-таки дальше он пишет, что лучше из метаданных брать информацию о количестве записей, а это так — для примера и сравнения сколько времени займёт. Конечно, с dynamic SQL удобнее.

Совершенно верно, запрос сработает только для объектов внутри схемы по-умолчанию — dbo, или внутри схемы текущего пользователя. Для других схем их имя надо указать явно. Более того, все имена объектов нужно заключать в квадратные скобки

Нужно всего лишь поправить запрос для курсора:

Спасибо.

Ну и еще вагон и маленькая тележка замечаний к коду автора статьи

Действительно, код не идеален. Но он рабочий (а там где возможны проблемы — я постарался описать в каких ситуациях они могут возникнуть) и, при необходимости, каждый сможет допилить его под себя без особых проблем.
перевод с sqlservercentral.com, кажется? Шикарный ресурс.
Отличный перевод нужной статьи. Держать все полезные запросы под рукой всегда нужно. Спасибо.
Sign up to leave a comment.

Articles