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

Откуда:
Сообщений: 31
Добрый день!
У меня есть рабочий триггер на insert.
Мне необходимо полученное значение при действии insert отнять от полученного sql запроса SELECT TOP 1 val from table1 order by Data desc

Вот мой пример:
declare @m1 float
declare @ТекущаяДата datetime
set @ТекущаяДата = GetDate()
EXEC SetMre @ID=9125, @Time=@ТекущаяДата, @ValOut=@m1


Подскажите пожалуйста, как правильно это сделать???
17 ноя 14, 17:06    [16860479]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL триггер insert с чтением из базы  [new]
Glory
Member

Откуда:
Сообщений: 104751
kristow
Мне необходимо полученное значение при действии insert

команда insert оперирует записями, а не значениями
все записи, добавленные в таблицу, в триггере доступны через виртуальную таблицу inserted
17 ноя 14, 17:09    [16860501]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL триггер insert с чтением из базы  [new]
kristow
Member

Откуда:
Сообщений: 31
ну у меня триггер выглядит вот так:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Тригер
ALTER TRIGGER [dbo].[tr_Часовая_1103838]
ON [en].[dbo].[Часовая_1103838]
After insert 
AS
Set XACT_ABORT ON
declare @m1 float
declare @m2 float
declare @ТекущаяДата datetime
set @ТекущаяДата = GetDate()
EXEC SetMre @ID=9125, @Time=@ТекущаяДата, @ValOut=@m1

Этот триггер у меня отрабатывает действии при получении новой записи...
Так вот у меня вопрос, как мне в строку EXEC SetMre @ID=9225, @Time=@ТекущаяДата, @ValOut=@m2 т.е. в M2 присвоить полученное значение из действия M1 - (SELECT TOP 1 val from table1 order by Data desc) ???
17 ноя 14, 17:14    [16860543]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL триггер insert с чтением из базы  [new]
Glory
Member

Откуда:
Сообщений: 104751
kristow
т.е. в M2 присвоить полученное значение из действия M1 - (SELECT TOP 1 val from table1 order by Data desc) ???

Вы не знаете, как считать значение поля таблицы в перемнную что ли ?
Вы же вроде используете SET у себя в триггере ?
17 ноя 14, 17:17    [16860585]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL триггер insert с чтением из базы  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
kristow
ну у меня триггер выглядит вот так:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Тригер
ALTER TRIGGER [dbo].[tr_Часовая_1103838]
ON [en].[dbo].[Часовая_1103838]
After insert 
AS
Set XACT_ABORT ON
declare @m1 float
declare @m2 float
declare @ТекущаяДата datetime
set @ТекущаяДата = GetDate()
EXEC SetMre @ID=9125, @Time=@ТекущаяДата, @ValOut=@m1

Этот триггер у меня отрабатывает действии при получении новой записи...
Так вот у меня вопрос, как мне в строку EXEC SetMre @ID=9225, @Time=@ТекущаяДата, @ValOut=@m2 т.е. в M2 присвоить полученное значение из действия M1 - (SELECT TOP 1 val from table1 order by Data desc) ???

вы чтоли как-то кривовато объясняете что-ли, или я сам туплю?
вы объявляете @m1 - соответственно оно NULL
потом передаете этот NULL в процедуру. зачем? ну предположим так надо
далее вы хотите от этого NULL что-то отнять.
ну в принципе можно и отнять, только результат будет NULL
получите то что хотите отнять например в отдельную переменную
SELECT TOP 1 @m3=val from table1 order by Data desc
потом вычислите разность
select @m2=@m1-@m3
ну и вставляйте @m2 туда куда вы хотели
17 ноя 14, 17:34    [16860799]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL триггер insert с чтением из базы  [new]
kristow
Member

Откуда:
Сообщений: 31
Всем спасибо. Я просто новичок. И поэтому показалось что надо изобрести срочно велосипед...
LEOV спасибо за разжевывание...
Сейчас все заработало :)
18 ноя 14, 10:40    [16863591]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить