Comments 11
Спасибо за статью, некоторые запросы сильно работу облегчат.
Отлично, однозначно в избранное!
Запросы полезные, жаль про статистики ничего не написано.
Думаю, статья и так достаточно большая, увеличивать ее еще — это значит делать абсолютно нечитабельной. Лучше найти полезные статьи про статистики на английском, и также их перевести. Про некоторые статистики статью переводил я — посмотрите, может быть, будет интересно.
Если у вас SQL Server 2008 R2 или более поздняя редакция, у вас есть sys.dm_db_stats_properties. Если более ранняя редакция, то можно использовать sp_helpstats и/или DBCC SHOW_STATISTICS.
Намного удобнее использовать 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.
Исследуем базы данных с помощью T-SQL