Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2012, 17:01   #1
jigy2
 
Регистрация: 11.05.2010
Сообщений: 6
По умолчанию ms sql server 2005 coss apply

Доброго времени суток! Вопрос скорее всего глупый и простой, но я не могу разобраться без вашей помощи!)
Мною была создана процедура, которая парсит xml-поле и инсертит или апдейтит данные в таблицу, все необходимые значения атрибутов хранились в одном теге, всё работало нормально.
Теперь передо мной возникла задача записать значения атрибутов из разных тегов. И в данном случае процедура стала выполняться мин 5, и данные не заполняются.
Подскажите что я делаю не так...
xml выглядит примерно так:
Цитата:
<response result="0">
<reports>
<getCash result="0">
<trm agent="45000" id="921000">
<currency id="643">
<notes GoBy="0" SumGoBy="0.0" count="76" sum="21720.00">
<nominal count="7" value="10.00" />
<nominal count="17" value="50.00" />
</notes>
<coins GoBy="0" count="0" sum="0.000">
<nominal count="0" value="0.01" />
<nominal count="0" value="0.05" />
</coins>
</currency>
</trm>
</getCash>
</reports>
</response>
Процедура:

Код:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[_RNKO_Get_Cash]
@resp_id int
AS
declare @cursor cursor ,
		@Num int,
		@notes_sum float,
		@coins_sum float
BEGIN
	SET NOCOUNT ON;
	set @cursor = cursor scroll
	FOR 
		SELECT	cell1.value ('@id','int') as num,
				cell2.value ('./@sum','float') as notes_sum ,
				cell3.value ('./@sum', 'float') as coins_sum
		FROM dbo._RNKO_RESPONSE r
		cross apply r.response_blob.nodes('/response/reports/getCash/trm') as cells1(cell1)
        cross apply response_blob.nodes('/response/reports/getCash/trm/currency/notes') as cells2(cell2)
        cross apply r.response_blob.nodes('/response/reports/getCash/trm/currency/coins') as cells3(cell3)
		where r.response_id = @resp_id 
	/*Открываем курсор*/
	OPEN @cursor
	/*первая строку*/
	FETCH NEXT FROM @cursor INTO 
							@Num,
							@notes_sum,
							@coins_sum
	WHILE @@FETCH_STATUS = 0
	BEGIN
	    UPDATE dbo._RNKO_TERMINAL_ONLINE 
        SET SUMMLAST = @notes_sum + @coins_sum
		where Num = @Num
	/*следующая строку*/
	FETCH NEXT FROM @CURSOR INTO
							@Num,
							@notes_sum,
							@coins_sum
			
    END
    CLOSE @cursor
END

Последний раз редактировалось Stilet; 04.07.2012 в 20:24.
jigy2 вне форума Ответить с цитированием
Старый 05.07.2012, 11:55   #2
jigy2
 
Регистрация: 11.05.2010
Сообщений: 6
По умолчанию

В решении своей проблемы продвинулась, но не до конца. Надо было изначально в cross apply указывать макс тег , а в select значения тех атрибутов, которые находятся выше указывать через ../ (причем насколько выше, столько и тегов).
В итоге у меня получилось так:

SELECT n.value ('../../@id','int') as num
n.value ('@sum','float') as notes_sum,
FROM dbo._RNKO_RESPONSE r
cross apply r.response_blob.nodes('/response/reports/getCash/trm/currency/notes') as coins(n)
where r.response_id = @resp_id

Но проблема остается не решенной до конца, так как я не могу вытащить данные по сумме (sum) из тегов notes, coins в одном selectе. Так как тег notes не находится внутри тега coins, а находится рядом.
если select изменить так:
SET NOCOUNT ON;
SELECT n.value ('../../@id','int') as num,
n.value ('@sum','float') as notes_sum,
c.value ('@sum','float') as coins_sum
FROM dbo._RNKO_RESPONSE r
cross apply r.response_blob.nodes('/response/reports/getCash/trm/currency/notes') as notes(n)
cross apply r.response_blob.nodes('/response/reports/getCash/trm/currency/coins') as coins(c)
where r.response_id = @resp_id
то процедура в итоге очень долго выполняется и ничего не возвращает...
jigy2 вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
база ms sql server 2005 zazic2p SQL, базы данных 0 05.10.2011 16:31
Работа с MS SQL Server 2005 EE LittleFatCat SQL, базы данных 2 03.10.2011 11:00
MS SQL 2005 Server регистрозависимым Cawboy БД в Delphi 0 26.03.2010 15:45
Вставка БД с SQL server 2005 фЁдОр SQL, базы данных 17 20.11.2007 17:15