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

Откуда:
Сообщений: 506
insert into @t
select * from @G
   order by ID

хочу чтоб ставились записи по возрастанию @G.ID. нету ли тут подводных камней? спс за внимание!
1 май 12, 11:38    [12492005]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
Порядок записей в таблице не определен. В insert указывать order by бессмысленно.
1 май 12, 11:44    [12492011]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
step_ks
Member

Откуда:
Сообщений: 936
MasterZiv
В insert указывать order by бессмысленно.

Для получения identity в порядке order by не бессмысленно. Но это не задача автора, судя по select *.
1 май 12, 11:52    [12492023]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Если в @t нет identity-столбца, то какая разница в каком порядке будут вставлены строки?
1 май 12, 12:00    [12492040]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
хочу сортировать, по поле (Дата datetime)
1 май 12, 12:02    [12492050]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
iljy
Member

Откуда:
Сообщений: 8711
ZVER-10
хочу сортировать, по поле (Дата datetime)

12492040
1 май 12, 12:19    [12492077]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
iljy,
хочу чтоб вставились по порядке даты, потому что при вставке триггер считает остаки
1 май 12, 12:24    [12492082]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
iljy
Member

Откуда:
Сообщений: 8711
ZVER-10
iljy,
хочу чтоб вставились по порядке даты, потому что при вставке триггер считает остаки

Какой еще триггер?? На табличной переменной? Да ну??
1 май 12, 12:37    [12492096]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
iljy,
:) это я просто пример привел:) чтоб понять суть группировки при вставке
1 май 12, 12:38    [12492098]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
ZVER-10,
так. стоит положиться на группировку при вставке или нет?
1 май 12, 13:31    [12492184]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
ZVER-10
iljy,
хочу чтоб вставились по порядке даты, потому что при вставке триггер считает остаки


то есть вы думаете, что одна команда insert вызовет много последовательных срабатываний триггера?
1 май 12, 13:41    [12492203]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
Shakill,
нет, всего один раз вызывается. вы скажите про группировку. а триггер долгая история, не хочу тут привести.
1 май 12, 13:49    [12492240]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
ZVER-10
Shakill,
нет, всего один раз вызывается. вы скажите про группировку. а триггер долгая история, не хочу тут привести.


так вы сначала поясните, что вам должна дать вставка группы записей одним инсертом в определенном порядке, по вашему мнению.

и при чем тут слово "группировка"?
1 май 12, 13:53    [12492251]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
Shakill,
если интересно . есть табл.
Т1(id identity,id_tovar int, kol int,id_otKogo int, id_Komu int,data datetime)
и есть табл
ostatokDay(id identity,id_sklada int,kol int,data datetime)
тут фиксируются остатки для каждого склада на каждый день. при добавление в табл. Т1, в табл оcтсаток надо либо прибавить/отнимать количество такого товара для такого склада если ostatokDay.Data>T1.data.если нету совпадение по дате, товар, склад тогда просто вставить строку в табл остаток .
1 май 12, 14:07    [12492293]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
ZVER-10,
извиняюсь табл oststokDay:
idid_skladaid_tovarkol data

это примерные таблицы
1 май 12, 14:11    [12492302]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
Shakill
.....и при чем тут слово "группировка"?

извиняюсь, сортировка а не группировка:)
1 май 12, 14:19    [12492318]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
ZVER-10,

ну так надо не пытаться задать порядок вставки в T1, а правильно написать триггер, который в зависимости от поступившего набора данных производит вставку и обновление oststokDay
1 май 12, 14:20    [12492321]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
Shakill,
ок, ща я попробую привести триггер, а вы покритикуйте
1 май 12, 14:24    [12492333]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
Shakill,
вот триггер, только что прикинул свои мысли(имхо неудачные). прошу не материть :)
+

create trigger [tr_Insert] on [dbo].T1
after insert
as
BEGIN
SET NOCOUNT ON

create table #Prihod(
	 id			int primary key not null
	,id_tovar	int
	,kol		int
	,data		datetime
	,id_komu	int
) 
--это таблица записей которые до вставки не имели движение в даную дату для указанного склада по указанным товаром
--их надо вставлять в табл. остаток и увеличить все записи табл. остатка если дата больше чем вставляемой строки
--естественно,при совпадение склада и товара

insert #Prihod(id,id_tovar,kol,data,id_sklada)

select id,id_tovar,kol,data,id_komu
	from inserted i
			join
		 dbo.ostatokDay o 
			on	o.id_tovar!=i.id_tovar
			and o.data!=i.data
			and o.id_sklada!=i.id_komu
----------------------------------------------------------------------------------------
create table #Rashod(
	 id			int primary key not null
	,id_tovar	int
	,kol		int
	,data		datetime
	,id_otKogo	int
) 
--это таблица записей которые до вставки не имели движение в даную дату для указанного склада по указанным товаром
--их надо вставлять в табл. остаток и уменьшить все записи табл. остатка если дата больше чем вставляемой строки
--естественно,при совпадение склада и товара

insert #Rashod(id,id_tovar,kol,data,id_sklada)

select id,id_tovar,kol,data,id_otKogo
	from inserted i
			join
		 dbo.ostatokDay o 
			on	o.id_tovar!=i.id_tovar
			and o.data!=i.data
			and o.id_sklada!=i.id_otKogo
---------------------------------------------------------------------------------------------------------------------
--теперь в табл. остаток добавим всех таблица записей которые до вставки не имели движение в даную дату 
--для указанного склада по указанным товаром
insert dbo.ostatokDay

select id,id_tovar,kol,data,id_otKogo from #Rashod
union all
select id,id_tovar,kol,data,id_komu	  from #Prihod

---и обновим табл. остаток===========================================================================================
update o
	set o.kol=o.kol+p.kol
	from dbo.ostatokDay
			join
		  #Prihod p on o.id_sklada=p.id_sklada 
					and o.id_tovar=p.id_tovar 
					and o.data>p.data
---------------------------------------------------------------------------------------------------------------------
update o
	set o.kol=o.kol-r.kol
	from dbo.ostatokDay
			join
		  #Rashod r on o.id_sklada=r.id_sklada 
					and o.id_tovar=r.id_tovar 
					and o.data>r.data
--------------------------------------------------------------------------------------------------------------------
--тут обновляем на основы записей табл.исертед котрые не попали в табл расход/приход 
update o
	set o.kol=o.kol-i.kol
	from dbo.ostatokDay
			join
		  inserted i on o.id_sklada=i.id_sklada 
					 and o.id_tovar=i.id_tovar 
					 and o.data=i.data 
					 and o.id_sklada=i.id_otKogo
		where i.id not in (select id from #Rashod)
	 order by i.data
---------------------------------------------------------------------------------------------------------------------
update o
	set o.kol=o.kol+i.kol
	from dbo.ostatokDay
			join
		  inserted i on o.id_sklada=i.id_sklada 
					 and o.id_tovar=i.id_tovar 
					 and o.data=i.data
                     and o.id_sklada=i.id_Komu
		where i.id not in (select id from #Prihod)
	 order by i.data


END
1 май 12, 15:29    [12492457]     Ответить | Цитировать Сообщить модератору
 Re: order by при insert  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
Shakill,
я так умудрил, что сам читая не понимаю что делает мой триггер:).
1 май 12, 19:05    [12492901]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить