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

Откуда: Москва
Сообщений: 509
Есть таблица справочник работ WrkDict
id_WrkDict
id_WrkParent

где id_WrkParent ссылка на id этого же справочника.

Есть таблица проведенных работ
id
id_WrkDict
dat

куда заносятся работы.

Алгоритм таков, если на выбранную работу (id_wrk) есть ссылки (id_parent),
их надо занести в таблицу проведенных работ вместе с выбранной
Сейчас решается через курсор
			INSERT INTO Wrk	(id_WrkDict)
				 VALUES (@id_WrkDict)
			select @idrec=SCOPE_IDENTITY() 

			--Поиск сопутствующих
			declare CurChild	cursor local static 
				for 
				select id_WrkDict from dbo.WrkDict where id_WrkParent=@id_WrkDict 
			open CurChild
			fetch next from CurChild into @id
			while @@fetch_status =0	
			begin
				INSERT INTO Wrk	(id_WrkDict)
					 VALUES (@id)
				fetch next from CurChild into @id
			end 
			CLOSE CurChild
			DEALLOCATE CurChild


Можно как то избавиться от курсора?
28 фев 12, 16:28    [12164908]     Ответить | Цитировать Сообщить модератору
 Re: Избавиться от курсора  [new]
aleks2
Guest
;with
allworks as
(select @id_WrkDict as id_WrkDict
 union all
 select t.id_WrkDict
 from allworks A inner join WrkDict T on T.id_WrkParent=A.id_WrkDict
)
select * FROM allworks
-- insert вместо select * FROM allworks напиши ужо сам
-- хотя мне что-то померещилось, что у тя фсего ОДИН уровень вложенности?
-- тады там ни CTE, ни курсора ваще не нада.
28 фев 12, 16:37    [12164983]     Ответить | Цитировать Сообщить модератору
 Re: Избавиться от курсора  [new]
asdor
Member

Откуда: Москва
Сообщений: 509
aleks2,
Уровень вложенности железно 1.
По определению.
28 фев 12, 17:29    [12165468]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить