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

Откуда: Moscow
Сообщений: 178
У меня на таблицу T1 навешен тригер (After Insert). Результат тригера нужно занести в разные таблицы. Как это сделать? Динамичекский sql не подходит, тат как код тригера большой.

----------------------------------------------------
Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86) Mar 29 2009 10:27:29 Copyright (c) 1988-2008 Microsoft Corporation Express Edition with Advanced Services on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
16 окт 09, 13:39    [7796726]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
А что такое "результат триггера" ? У вас триггер выдает какое-то значение куда-то ?
16 окт 09, 13:41    [7796746]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
Aleksey_P
Member

Откуда: Moscow
Сообщений: 178
... у таблиц в которые заносится результат тригера одинаковые названия столбцов

----------------------------------------------------
Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86) Mar 29 2009 10:27:29 Copyright (c) 1988-2008 Microsoft Corporation Express Edition with Advanced Services on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
16 окт 09, 13:41    [7796750]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
Aleksey_P
Member

Откуда: Moscow
Сообщений: 178
Glory
А что такое "результат триггера" ? У вас триггер выдает какое-то значение куда-то ?


он добавляет необходимые данные для других таблиц
16 окт 09, 13:42    [7796763]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
Aleksey_P
... у таблиц в которые заносится результат тригера одинаковые названия столбцов

Триггер - это программный код, в котором вы описываете нужные вам действия.
Если вам нужно изменить эти действия, то придется менять текст триггера
16 окт 09, 13:44    [7796778]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
Aleksey_P
Glory
А что такое "результат триггера" ? У вас триггер выдает какое-то значение куда-то ?


он добавляет необходимые данные для других таблиц

Триггер ничего не добавляет. Добавлять могут конкретные команды, которые вы поместили в тело триггера
16 окт 09, 13:45    [7796787]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
Aleksey_P
Member

Откуда: Moscow
Сообщений: 178
Glory
Aleksey_P
Glory
А что такое "результат триггера" ? У вас триггер выдает какое-то значение куда-то ?


он добавляет необходимые данные для других таблиц

Триггер ничего не добавляет. Добавлять могут конкретные команды, которые вы поместили в тело триггера


ну это суть меняет как-то моего вопроса?
16 окт 09, 13:53    [7796855]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
Aleksey_P


ну это суть меняет как-то моего вопроса?

Разумеется. Потому именно вам придется в триггере написать те команды, которые вам нужны
Сервер за вас это делать не будет
16 окт 09, 13:55    [7796872]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
Aleksey_P
Member

Откуда: Moscow
Сообщений: 178
Glory,

ну то что вы тут пока пишете мне тоже никак не помогает.
16 окт 09, 14:02    [7796944]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
iljy
Member

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

"Как же тебя понять-то коль ты ничего не говоришь?" Вы не пробовали вопрос конкретнее задать? Что именно и куда вы пытаетесь записать и что у вас не получается?
16 окт 09, 14:03    [7796956]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
Aleksey_P
Glory,

ну то что вы тут пока пишете мне тоже никак не помогает.

Погодите немного, сейчас я впаду в транс, считаю удаленно с вашего сервера текст триггера, а из вашего мозга постановку задачи, и напишу вам готовое решение
16 окт 09, 14:04    [7796959]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
Aleksey_P
Member

Откуда: Moscow
Сообщений: 178
Glory,

столбцы в Table_2: i(int), buy(decimal), sell(decimal), date_sell(date)
столбцы в t_insert: price(decimal), operation(varchar), date_sell(date), name_paper(varchar)



Что делает тригер:

Если операция "Купля", он вставляет новые значения в столбец buy и сортирует его по возрастанию начиная с последнего не-null значения в столбце sell

Если опреация "Продажа", то он просто обновляет столбец sell.

ПРОБЛЕМА В ТОМ, ЧТО таких таблиц как Table_2 несколько в зависимости от товара, имена у них Paper_Red, Paper_Blue, Paper_Green и т.д.
И из тригера мне нужно обратиться к нужной таблице в зависимости данных в столбце t_insert.name_paper



ALTER TRIGGER [dbo].[trigTest]
   ON  [test].[dbo].[t_insert]
   AFTER INSERT
AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
SET NOCOUNT ON;

declare @lastInd int
declare @nextLot int
set @lastInd = 0
set @nextLot = 0 
    
    if (select operation from inserted) = 'Купля'
	BEGIN
		set @lastInd = (select count(i) from Table_2)
		while @nextLot < (select lots from inserted)
		begin
			set @nextLot += 1
			set @lastInd += 1
			
			insert into Table_2(i, buy)  
			values (@lastInd, (select price from inserted))
		end
		
	-- +Сортировка столбца buy
	--set @lastInd = (select count(i) from Table_2)+1
	select identity(int) as i, buy into #tempTable from dbo.Table_2
	where i between ((select count(sell) from dbo.Table_2)+1) and (select count(buy) from dbo.Table_2) order by buy
	update srs set buy = tt.buy
	from dbo.Table_2 as srs 
	join #tempTable as tt 
	on srs.i=tt.i+(select count(sell) from dbo.Table_2)
	select * from #tempTable
	drop table #tempTable
	-- -Сортировка	
	
	END
	
	ELSE IF (select operation from inserted) = 'Продажа'
	BEGIN
	
		set @lastInd = (select count(sell) from Table_2)
		while @nextLot < (select lots from inserted)
		begin
			set @nextLot += 1
			set @lastInd += 1
			
			update Table_2 
			set sell = (select price from inserted), date_sell = (select date_sell from inserted)
			where i = @lastInd
			
		end
	
	END

END

16 окт 09, 14:19    [7797058]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
Aleksey_P,

зачем вам разделять Вашу бумагу на несколько таблиц? Неужто поля "Цвет" недостаточно?
16 окт 09, 14:35    [7797169]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
Aleksey_P
Member

Откуда: Moscow
Сообщений: 178
PaulYoung
Aleksey_P,

зачем вам разделять Вашу бумагу на несколько таблиц? Неужто поля "Цвет" недостаточно?


т.е. вы предлагаете сделать так:
одна таблица с полями: i(int), buy(decimal), sell(decimal), date_sell(date), color(varchar)?
16 окт 09, 14:39    [7797198]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
iljy
Member

Откуда:
Сообщений: 8711
Aleksey_P
Glory,

столбцы в Table_2: i(int), buy(decimal), sell(decimal), date_sell(date)
столбцы в t_insert: price(decimal), operation(varchar), date_sell(date), name_paper(varchar)



Что делает тригер:

Если операция "Купля", он вставляет новые значения в столбец buy и сортирует его по возрастанию начиная с последнего не-null значения в столбце sell

Если опреация "Продажа", то он просто обновляет столбец sell.

ПРОБЛЕМА В ТОМ, ЧТО таких таблиц как Table_2 несколько в зависимости от товара, имена у них Paper_Red, Paper_Blue, Paper_Green и т.д.
И из тригера мне нужно обратиться к нужной таблице в зависимости данных в столбце t_insert.name_paper

Тогда либо динамика, либо ветвление по name_paper и разные запросы в каждой ветке. Но вообще я согласен с PaulYoung - на фига вам вообще понадобилось такое разделение по таблицам?

И еще: триггер написан неправильно - в принципе не учитывается вариант, что может быть одновременно несколько записей в таблице inserted.
16 окт 09, 14:41    [7797221]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
baracs
Member

Откуда: Москва
Сообщений: 7198
Aleksey_P
Glory,ПРОБЛЕМА В ТОМ, ЧТО таких таблиц как Table_2 несколько в зависимости от товара, имена у них Paper_Red, Paper_Blue, Paper_Green и т.д.
И из тригера мне нужно обратиться к нужной таблице в зависимости данных в столбце t_insert.name_paper

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

А вообще, кошмар какой-то! Свят-свят-свят!
16 окт 09, 14:42    [7797234]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
[quot Aleksey_P]одна таблица с полями: i(int), buy(decimal), sell(decimal), date_sell(date), color(varchar)?[/quot Aleksey_P]ну хотя бы так, в качестве примера. хотя, как я понимаю, у вас может быть не только бумага, верно? тогда может стоит шире задуматься о свойствах товара и вынести их, например, в отдельные таблицы?
16 окт 09, 14:43    [7797237]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
Aleksey_P
одна таблица с полями: i(int), buy(decimal), sell(decimal), date_sell(date), color(varchar)?
ну хотя бы так, в качестве примера. хотя, как я понимаю, у вас может быть не только бумага, верно? тогда может стоит шире задуматься о свойствах товара и вынести их, например, в отдельные таблицы?
16 окт 09, 14:43    [7797242]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
залётный
Guest
Aleksey_P
т.е. вы предлагаете сделать так:
одна таблица с полями: i(int), buy(decimal), sell(decimal), date_sell(date), color(varchar)?


+ еще бизнес-логику вынести в процедуру, а не писать ее в триггере
16 окт 09, 14:44    [7797251]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
Aleksey_P
Member

Откуда: Moscow
Сообщений: 178
iljy

Тогда либо динамика, либо ветвление по name_paper и разные запросы в каждой ветке. Но вообще я согласен с PaulYoung - на фига вам вообще понадобилось такое разделение по таблицам?

И еще: триггер написан неправильно - в принципе не учитывается вариант, что может быть одновременно несколько записей в таблице inserted.



1. что значит: "ветвление по name_paper и разные запросы в каждой ветке"?
2. несколько записей одновременно в таблицу попасть не могут. данные приходят из вне посредством вставки через insert насколько мне известно. короче это работает.
16 окт 09, 14:46    [7797272]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
Aleksey_P,

1. Буквально
2. Через insert может быть вставлено >= одной записи
16 окт 09, 14:47    [7797289]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
PaulYoung
2. Через insert может быть вставлено >= одной записи
Спорное утверждение
INSERT [Table]([Fileld])SELECT TOP(0) NULL;
16 окт 09, 14:51    [7797318]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
iap,

согласен, что тут скажешь
16 окт 09, 14:52    [7797334]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
Aleksey_P
Member

Откуда: Moscow
Сообщений: 178
iap,

я поэтому и говорю, что это работает, но мне не известна точная команда вставки, так что второй пункт не проблема
16 окт 09, 14:55    [7797368]     Ответить | Цитировать Сообщить модератору
 Re: Результат тригера в разные таблицы  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
Aleksey_P
iap,

я поэтому и говорю, что это работает, но мне не известна точная команда вставки, так что второй пункт не проблема
выделенное в Вашем случае - большая проблема
16 окт 09, 14:56    [7797376]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить