Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Простой запрос  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
declare curs cursor for
select name from sysobjects where xtype='u'
declare @name sysname
declare @sql varchar (50)
declare @ww int
declare @sum int
set @sum=0
open curs
fetch next from curs into @name
while @@fetch_status=0
begin

set @sql='select count(*) from '+ @name
exec( @sql)

print @sql1

fetch next from curs into @name
end
close curs
deallocate curs

Привет всем! Скажите пожалуйста, как мне просуммировать кол-записей у всех таблиц БД
13 ноя 09, 08:08    [7923575]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
declare @t table(a int)
declare curs cursor for
select name from sysobjects where xtype='u'
declare @name sysname
declare @sql varchar (50)
declare @ww int
declare @sum int 
set @sum=0
open curs 
fetch next from curs into @name
while @@fetch_status=0
begin

set @sql='select count(*) from '+ @name
INSERT into @t (a) 
exec( @sql)

--print @sql

fetch next from curs into @name
end
close curs
deallocate curs

SELECT sum(a) FROM @t
---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум..
13 ноя 09, 08:21    [7923588]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Хм… посмотрел ваш курсор…

Я бы его видоизменил немного, если у вас 2005 или 2008…

declare @t table(a int)
declare @t1 table(a varchar(256))

declare curs cursor for
select name from sysobjects where xtype='u'
declare @name sysname
declare @sql varchar (50)
declare @ww int
declare @sum int 
set @sum=0
open curs 
fetch next from curs into @name
while @@fetch_status=0
begin

	BEGIN TRY
		set @sql='select count(*) from '+ @name
		INSERT into @t (a) 
		exec( @sql)
	END TRY
	BEGIN CATCH
		INSERT INTO @t1(a) SELECT @name
	END CATCH

fetch next from curs into @name
end
close curs
deallocate curs

--Получаем сумму
SELECT sum(a) FROM @t
--Получаем имена проблемных объектов
SELECT a FROM @t1
---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум..
13 ноя 09, 08:38    [7923611]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Если версия больше 2000, то для каждой таблицы:

SELECT
  OBJECT_NAME(object_id) AS TableName,
  SUM(rows) AS TableRows
FROM
  sys.partitions
WHERE
  index_id IN (0, 1) AND
  OBJECTPROPERTY(object_id, 'IsTable') = 1 AND
  OBJECTPROPERTY(object_id, 'IsMSShipped') = 0
GROUP BY
  OBJECT_NAME(object_id)
ORDER BY
  2 DESC

и для всех:

SELECT
  SUM(rows) AS TableRows
FROM
  sys.partitions
WHERE
  index_id IN (0, 1) AND
  OBJECTPROPERTY(object_id, 'IsTable') = 1 AND
  OBJECTPROPERTY(object_id, 'IsMSShipped') = 0
13 ноя 09, 09:02    [7923682]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
залётный
Guest
Имя схемы может быть отличным от dbo. Юзайте метод, который предложил pkarklin или прислюнявьте в своем курсоре к имени таблицы имя схемы.
13 ноя 09, 09:28    [7923769]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
pkarklin,

у меня версия sql 2000
13 ноя 09, 09:42    [7923822]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
DENIS_CHEL,

Server: Msg 197, Level 15, State 1, Line 16
EXECUTE cannot be used as a source when inserting into a table variable.
13 ноя 09, 09:44    [7923830]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
В 2000 нет TRY\CATCH используйте мой первый вариант…
---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум..
13 ноя 09, 09:47    [7923850]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
DENIS_CHEL,
это ошибка первого
13 ноя 09, 09:49    [7923862]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
pacha
Member

Откуда:
Сообщений: 239
для 2000-го
create table #t (a int)

INSERT into #t (a) 
exec sp_msforeachtable 'select count(*) from ?'

SELECT sum(a) FROM #t
13 ноя 09, 09:54    [7923884]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
IF OBJECT_ID(N'tempdb..#t', N'U') IS NOT NULL 
DROP TABLE #t
GO

CREATE TABLE #t(a int)
GO

declare curs cursor for
select name from sysobjects where xtype='u'
declare @name sysname
declare @sql varchar (50)
declare @ww int
declare @sum int 
set @sum=0
open curs 
fetch next from curs into @name
while @@fetch_status=0
begin

set @sql='select count(*) from '+ @name
INSERT into #t (a) 
exec( @sql)

--print @sql

fetch next from curs into @name
end
close curs
deallocate curs

SELECT sum(a) FROM #t

а так?

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум..
13 ноя 09, 09:56    [7923895]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
DENIS_CHEL,

Server: Msg 7987, Level 22, State 2, Line 1
A possible database consistency problem has been detected on database 'alm1'. DBCC CHECKDB and DBCC CHECKCATALOG should be run on database 'alm1'.

Connection Broken
13 ноя 09, 11:22    [7924555]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Mari-Salt,

Что непонятно в сообщении?
13 ноя 09, 11:31    [7924643]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
У вас, что-то с БД, если БД игровая, то переподнимите ее из бекапа, иначе запустите проверку…

USE alm1
GO
DBCC CHECKDB;
GO

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум..
13 ноя 09, 11:50    [7924831]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
pkarklin, что мне надо делать?)
13 ноя 09, 11:53    [7924859]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Mari-Salt
pkarklin, что мне надо делать?)


Гм... DBCC CHECKDB and DBCC CHECKCATALOG should be run on database 'alm1'.
13 ноя 09, 11:59    [7924918]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
pkarklin, что мне надо делать?)
13 ноя 09, 13:08    [7925524]     Ответить | Цитировать Сообщить модератору
 Re: Простой запрос  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Мой совет почитать тынц

+ В перспективе подучить английский или освоить переводчики, быть повнимательней (я например то же не сразу прочитал текст вашей ошибки)…

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум..
13 ноя 09, 13:13    [7925580]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить