Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Перебрать все таблицы из битой базы, и выбрать "живые" (SQL 2005)  [new]
dolly_ev
Member

Откуда: Чита
Сообщений: 29
Maxx, да. Прочитал. Взлетело...
Все совсем хорошо, но
	set @sql = 'set nocount on; declare @c int; select @c = count(*) from ' + quotename(@name)
EXECUTE sp_executesql @qty=@sql

В итоговой таблице qty везде NULL, я так подозреваю, в него строка вместо int возвращается... как победить?
3 июл 14, 14:19    [16254991]     Ответить | Цитировать Сообщить модератору
 Re: Перебрать все таблицы из битой базы, и выбрать "живые" (SQL 2005)  [new]
dolly_ev
Member

Откуда: Чита
Сообщений: 29
dolly_ev
Maxx, да. Прочитал. Взлетело...
Все совсем хорошо, но
set @sql = 'set nocount on; declare @c int; select @c = count(*) from ' + quotename(@name)
EXECUTE sp_executesql @qty=@sql

В итоговой таблице qty везде NULL, я так подозреваю, в него строка вместо int возвращается... как победить?

Во бред написал :-(

ВСЁ! все взлетело, как хотелось!
Всем помогавшим СПАСИБО!


окончательный вариант:
use MNFK
declare @t table (name sysname, i int identity(1,1), st bit, qty int, err nvarchar(1000))
declare @name sysname, @i int, @x int, @sql nvarchar(2048), @qty int
DECLARE @ParmDefinition nvarchar(500)
SET @ParmDefinition = N'@c int OUTPUT';
set @i =1
set @x =0
insert into @t(name) select name from sys.all_objects where type =N'U'
set @x = (select MAX(i) from @t)
if @x <>0
begin
while @i<=@x
	begin
		set @name = (select name  from @t where i=@i)
		--set @name = quotename(@name, '[]')
		set @sql = 'set nocount on; select @c = count(*) from ' + quotename(@name) --declare @c int;
		begin try
			EXECUTE sp_executesql @sql, @ParmDefinition, @c=@qty OUTPUT
			update @t set st =1, qty =@qty where i=@i
		end try 
		begin catch
			--set @err = select ERROR_MESSAGE()
			update @t set st =0, err =ERROR_MESSAGE() where i=@i 
		end catch
		set @i=@i+1
		set @sql = ''
	end
end
select * from @t order by name


Результат:
NAMEISTQTYERR
_1SACCS1211479NULL
_1SACCSEL1570NULLSQL Server detected a logical consistency-based I/O error: incorrect pageid (expected 1:1756805; actual 0:0). It occurred during a read of page (1:1756805) in database ID 5 at offset 0x00000359d0a000 in file 'C:\BASES\SQL_Data\MNFK.mdf'. This error can be caused by many factors; for more information see SQL Server Books Online.
_1SBKTTL1450NULLSQL Server detected a logical consistency-based I/O error: incorrect pageid (expected 1:1788843; actual 0:0). It occurred during a read of page (1:1788843) in database ID 5 at offset 0x00000369756000 in file 'C:\BASES\SQL_Data\MNFK.mdf'. This error can be caused by many factors; for more information see SQL Server Books Online.
_1SBKTTLC1390NULLSQL Server detected a logical consistency-based I/O error: incorrect pageid (expected 1:1820992; actual 0:0). It occurred during a read of page (1:1820992) in database ID 5 at offset 0x00000379280000 in file 'C:\BASES\SQL_Data\MNFK.mdf'. This error can be caused by many factors; for more information see SQL Server Books Online.
_1SCONNECT27811NULL
_1SCONST3670NULLSQL Server detected a logical consistency-based I/O error: incorrect pageid (expected 1:1828074; actual 0:0). It occurred during a read of page (1:1828074) in database ID 5 at offset 0x0000037c9d4000 in file 'C:\BASES\SQL_Data\MNFK.mdf'. This error can be caused by many factors; for more information see SQL Server Books Online.
_1SCORENT1511297NULL


Ну и да.. еще каунт заменить на DBCC CHECKTABLE
3 июл 14, 15:12    [16255397]     Ответить | Цитировать Сообщить модератору
 Re: Перебрать все таблицы из битой базы, и выбрать "живые" (SQL 2005)  [new]
dolly_ev
Member

Откуда: Чита
Сообщений: 29
Продолжаем разговор...
Как заметилось выше, coun(*) ничего не гарантирует, и несколько табличек даже с нормальным select * from не смогли экспортироваться мастером, ругнувшись на "a logical consistency-based I/O error: incorrect pageid"
Разобрался параллельно с IDENTITY_INSERT, основную массу таких табличек перелил через INSERT INTO ..(,,,) SELECT (,,) FROM.

И вот осталась одна (НУЖНАЯ!)), которая выдает почти все записи на select * from, и в самом конце облом.
Как можно перетащить такую? (не копи-пастом)
4 июл 14, 09:29    [16258284]     Ответить | Цитировать Сообщить модератору
 Re: Перебрать все таблицы из битой базы, и выбрать "живые" (SQL 2005)  [new]
dolly_ev
Member

Откуда: Чита
Сообщений: 29
dolly_ev
Как можно перетащить такую? (не копи-пастом)


Сам себе отвечаю, на память))):
лошара!
..WHERE ROW_ID<='Номер последней читаемой строки'
4 июл 14, 09:42    [16258334]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Microsoft SQL Server Ответить