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

Откуда:
Сообщений: 1066
вопрос - возможно ли переписать этот код одним запросом без использования курсора?

declare @result table(name varchar(100), title varchar(max),cnt int)	--таблица с результатом
declare @product table(name varchar(100), title varchar(max))
insert into @product(name,title) values('стол','стол обеденный'),('стул','стул кухонный')

declare @t table (x xml)
insert into @t(x) values('<product name="стол" count="4"/>'),('<product name="стул" count="1"/>') 


	declare @x xml	
	declare cr cursor local static forward_only read_only for
	select x from @t
	open cr
	
	fetch next from cr  into @x

		     
	while @@fetch_status = 0
	begin
		insert into @result (name,cnt,title)
		select x.name,x.cnt,p.title from 
		(
			select c.value('@name','varchar(100)') name,c.value('@count','int') cnt from @x.nodes('product') as t(c)
		) x left join @product p on p.name = x.name
		fetch next from cr  into @x
	end
	close cr
	deallocate cr

	select * from @result

	
18 окт 16, 11:35    [19793782]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса - возможно ли переписать запрос без курсора?  [new]
serpentariy
Member

Откуда:
Сообщений: 265
select x.name,x.cnt,p.title from 
		(
			select c.value('@name','varchar(100)') name,c.value('@count','int') cnt from @t cross apply x.nodes('product') as t(c)
		) x left join @product p on p.name = x.name
18 окт 16, 11:52    [19793877]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса - возможно ли переписать запрос без курсора?  [new]
marvel
Member

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

Спасибо!
18 окт 16, 11:54    [19793898]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить