понедельник, 30 августа 2010 г.

Разные запросы и полезняшки по SQL SERVER

--Информация по серверу
SELECT @@VERSION, SERVERPROPERTY('productversion') productversion, SERVERPROPERTY ('productlevel') productlevel

Способы подсчета количества записей в каждой из таблиц базы данных
--Способ 1: Поскольку приведенный ниже sql-код для подсчета количества записей использует таблицу sysindexes, его результат зависит от того, была ли обновлена статистика.
EXEC sp_msforeachtable 'UPDATE STATISTICS ?'
SELECT SUBSTRING(o.name, 1, 30) Table_Name ,i.ROWS Number_of_Rows
FROM sysobjects o
INNER join sysindexes i
ON (o.id = i.id)
WHERE o.xtype = 'u'
and i.indid < 2
ORDER BY o.name

--Способ 2: Следующий sql-код также может быть использован для определения количества записей в таблицах базы данных. Для подсчета числа строк этот sql-код использует функцию агрегации. Обрамление кавычками выбранного названия таблицы необходимо для обработки пробелов в названии (если такие названия существуют).
SET NOCOUNT ON
   DECLARE tables_cursor CURSOR
      FOR
      SELECT name FROM sysobjects WHERE type = 'U' ORDER BY 1
   OPEN tables_cursor
   DECLARE @tablename VARCHAR(50)
   FETCH NEXT FROM tables_cursor INTO @tablename
   WHILE (@@FETCH_STATUS <> -1)
   BEGIN
   SELECT @tablename = QUOTENAME(@tablename, '[]')
      DECLARE @CMD VARCHAR(100)
      PRINT @TABLENAME
      SELECT @CMD = ' select count(*) from '+@tablename+' '
   EXEC (@CMD)
      FETCH NEXT FROM tables_cursor INTO @tablename
   END
   DEALLOCATE tables_cursor
   SET NOCOUNT OFF
  
--Способ 3: Для решения поставленной задачи можно также использовать недокументированную хранимую процедуру sp_Msforeachtable. Sp_Msforeachtable сканирует все таблицы в определенной базе данных и выполняет указанную sql-команду (ы) для каждой из таблиц. Для подстановки имени таблицы используется символ "?".
sp_msforeachtable @command1= 'print ''?''', @command2 = "select count(*) from ?"  

Комментариев нет:

Отправить комментарий