Kutay yorgun Ответов: 1

Мой рекурсивный запрос cte дает мне одни и те же результаты дважды


var sqlcmd = new SqlCommand(" with cte as (select Order_ID, date_start as date, date_end from orders  union all  select Order_ID, dateadd(day, 1, date), date_end  from cte  where date < date_end) insert into dates(date, Order_ID) select date, Order_ID    from cte where Order_ID=@Order_ID Option(MAXRECURSION 0); ", con);

               var ds3 = new DataSet();
               var dtbl3 = new DataTable();
               var sda3 = new SqlDataAdapter(sqlcmd);
               sda3.SelectCommand.Parameters.AddWithValue("@OrdeR_ID", dataGridView1.CurrentRow.Cells["Order_ID"].Value.ToString());
               sda3.Fill(ds3);
               dataGridView2.DataSource = dtbl3;
               sda3.Fill(dtbl3);



Это дает мне такие результаты


13.11.2020						2155
14.11.2020						2156
15.11.2020						2157
13.11.2020						2158
14.11.2020						2159
15.11.2020						2160




вот чего я хочу.

13.11.2020						2158
14.11.2020						2159
15.11.2020						2160


Что я уже пробовал:

если я удалю
insert into dates(date, Order_ID)
от
insert into dates(date, Order_ID) select date, Order_ID from cte

это даст мне желаемые результаты, но мне нужно вставить эти даты в мою таблицу дат

1 Ответов

Рейтинг:
0

Richard Deeming

Вы работаете INSERT запрос, который не возвращает никаких данных. Основываясь на коде, который вы показали, ваш dtbl3 будет совершенно пусто.

Вы также вставляете данные в общую таблицу без предварительной очистки. Даже если у вас есть только один пользователь вашего приложения, каждый раз, когда ваш код запускается, он будет добавлять данные для выбранной строки в таблицу, которая будет просто продолжать расти. Если у вас есть несколько пользователей, выполняющих ваше приложение одновременно, проблема будет только усугубляться.

Вам нужно переосмыслить свой код.