powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вложенный select в курсоре
4 сообщений из 4, страница 1 из 1
Вложенный select в курсоре
    #39942660
Savywka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Целый день не могу решить проблему. Есть вложенный курсор, точнее их 3. Все работало до того момента, пока не понадобилось добавить условие в последний 3 курсор. Смысл в том, что я нахожу определенные записи и на их основе заполняю некую пользовательскую таблицу. Необходимо внести условие, что я выбираю строки только те, которых еще нет в той самой пользовательской таблице.
Так все работает:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
			---------------------------------3----------------------
				DECLARE PeopTab CURSOR FOR   
					select people.auto_card,people.pid, pc.prid
					from people
					inner join pr_current pc on pc.pid=people.pid
					inner join card on card.auto_card=people.auto_card
					inner join user_hrtb_dog_struct ds on ds.id_hr_struct=pc.Code_struct_name
					where 
					card.sex=@v_sex
					and  (YEAR(@i_Oper_Date-card.Date_birth)-1900) between @v_old_start and @v_old_finish
					and @i_Oper_Date between pc.Date_trans and pc.date_depart
					and people.out_date='2099-01-01'
					and ds.id_hr_dog= @DogID
					
				OPEN PeopTab  
				FETCH NEXT FROM PeopTab INTO @auto_card, @pid, @prid;
				WHILE @@FETCH_STATUS = 0  
					BEGIN  
					insert into user_mc_cust_dog_type_people (dog_id, dog_type_id, auto_card, pid, prid, Date_Modify, UserName)
					values (@dog_ident, @med_ident, @auto_card, @pid, @prid, getdate(), SUSER_SNAME());

				FETCH NEXT FROM PeopTab INTO @auto_card, @pid, @prid;
				END  
  
				CLOSE PeopTab;
				DEALLOCATE PeopTab;
			--	End;	

А вот так уже нет:
			---------------------------------3----------------------
				DECLARE PeopTab CURSOR FOR   
					select people.auto_card,people.pid, pc.prid
					from people
					inner join pr_current pc on pc.pid=people.pid
					inner join card on card.auto_card=people.auto_card
					inner join user_hrtb_dog_struct ds on ds.id_hr_struct=pc.Code_struct_name
					where 
					card.sex=@v_sex
					and  (YEAR(@i_Oper_Date-card.Date_birth)-1900) between @v_old_start and @v_old_finish
					and @i_Oper_Date between pc.Date_trans and pc.date_depart
					and people.out_date='2099-01-01'
					and ds.id_hr_dog= @DogID
							and people.pid not in (select p.pid 
							from user_mc_cust_dog_type_people p
							inner join user_mc_cust_dog d on p.dog_id=d.id
							and d.id_hr_dog=@DogID
							and d.tYear=@i_tYear)
					
				OPEN PeopTab  
				FETCH NEXT FROM PeopTab INTO @auto_card, @pid, @prid;
				WHILE @@FETCH_STATUS = 0  
					BEGIN  
					insert into user_mc_cust_dog_type_people (dog_id, dog_type_id, auto_card, pid, prid, Date_Modify, UserName)
					values (@dog_ident, @med_ident, @auto_card, @pid, @prid, getdate(), SUSER_SNAME());

				FETCH NEXT FROM PeopTab INTO @auto_card, @pid, @prid;
				END  
  
				CLOSE PeopTab;
				DEALLOCATE PeopTab;
			--	End;			
				-------------------------конец 3-------------------		



Может кто-то сталкивался, почему не работает.
PS Перепробовано все, заменял вложенный селект на временную таблицу, подцеплял через left outer join и т.д. результата нет.
...
Рейтинг: 0 / 0
Вложенный select в курсоре
    #39942661
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Savywka,

почему вы решили, что нужны курсоры?
Почему нельзя всё сделать одним INSERTом?
Изредка бывает,что нужен курсор. Но у вас откуда такая необходимость?
...
Рейтинг: 0 / 0
Вложенный select в курсоре
    #39942662
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Курсор тут не нужен. От слова "совсем".
2. Видимо p.pid допускает значение null.
...
Рейтинг: 0 / 0
Вложенный select в курсоре
    #39942716
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Savywka
Может кто-то сталкивался, почему не работает.
Конечно, все сталкивались с тем, что написанный код работает не так, как надо :-)
Просто требуется отладка.
Подсказать сложнее, чем вам отладить, ведь у вас код, и таблицы с данными.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вложенный select в курсоре
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]