помогите разобраться с триггером

renaton
Дата: 14.01.2009 11:26:07
Добрый день уважаемые!!!!
Такая проблема: Делаю триггер который срабатывает после вставки данных в таблицу и вставляет вставленные данные в другую таблицу, только поле со временем увеличивает на 30 мин. При вставке данных в таблицу в другой таблице ничего не пишется.. в чем может быть дело?
Вот код:
CREATE TRIGGER [InsInRegVal] ON [dbo].[Table_1]
AFTER INSERT NOT FOR REPLICATION AS
DECLARE @dateval datetime,
		@newval datetime
BEGIN
	SET NOCOUNT ON;
	SELECT @dateval=ins.[TIMEVALUE]
	FROM inserted ins INNER JOIN [dbo].[PAR] par
	ON ins.[ID] = par.[ID]
	SELECT @newval=DATEADD(minute, 30, @dateval)
	-------------------------------------
	INSERT INTO [dbo].[Table_2](
	[VALUE],[TIMESTAMP],[OBJ_ID])
	SELECT ins.[VALUE],@newval, par.[OBJ_ID]
	FROM inserted ins INNER JOIN [dbo].[PAR] par
	ON ins.[ID] = par.[ID]
END

Код для обоих одинаковых таблиц:
CREATE TABLE [dbo].[Table_2](
	[OBJ_ID] [numeric](38, 0) NOT NULL,
	[VALUE] [numeric](38, 10) NOT NULL,
	[TIMESTAMP] [datetime] NOT NULL
) ON [PRIMARY]
ЖораЖора
Дата: 14.01.2009 11:30:35
А что за таблица [dbo].[PAR] par ?
Исмаилов Андрей
Дата: 14.01.2009 11:37:52
renaton,
для начала: если будет выполнена массовая вставка с разными значениями даты?
Где Вы взяли ins.[ID]? И что за [PAR] table?
Redbor
Дата: 14.01.2009 11:40:51
... и есть ли в ней данные. Ибо если нет, то второй селект вернёт ноль строк и ничего не вставится. Это во-первых. А во-вторых, я бы переписал триггер так:
CREATE TRIGGER [InsInRegVal] ON [dbo].[Table_1] AFTER INSERT NOT FOR REPLICATION
AS
BEGIN
  SET NOCOUNT ON;

  INSERT INTO [dbo].[Table_2] ([VALUE], [TIMESTAMP], [OBJ_ID])
  SELECT ins.[VALUE], DATEADD (minute, 30, ins.[TIMEVALUE]) as newval, par.[OBJ_ID]
  FROM inserted ins
    INNER JOIN [dbo].[PAR] par ON ins.[ID] = par.[ID]
END
Паганель
Дата: 14.01.2009 11:41:51
renaton
вставляет вставленные данные в другую таблицу, только поле со временем увеличивает на 30 мин
Никак не могу понять, зачем автору такой дубляж данных.
Зачем вторая таблица вообще была создана?
renaton
Дата: 14.01.2009 12:13:38
Вот более достоверный код и более сокращенно (как в приведеном выше примере)... но все равно не работает :(
CREATE TRIGGER [InsInRegVal] ON [dbo].[OBJ_PARAMETER_VALUE_REG]
AFTER INSERT NOT FOR REPLICATION
AS
BEGIN
  SET NOCOUNT ON;

  INSERT INTO [dbo].[OBJ_PARAMETER_VALUE_test] ([VALUE], [TIMESTAMP], [OBJ_PARAMETER_ID])
  SELECT ins.[VALUE], DATEADD (minute, 30, ins.[TIMEVALUE]), par.[OBJ_PARAMETER_ID]
  FROM inserted ins
    INNER JOIN [dbo].[LINK_PAR_RECID] par 
		ON ins.[REC_ID] = par.[REC_ID]
END
Glory
Дата: 14.01.2009 12:15:21
renaton
Вот более достоверный код и более сокращенно (как в приведеном выше примере)... но все равно не работает :(

И каков ваш метод определения работает/неработает ? Это дебаггер ? Профайлер ? Отладочный вывод ?
iap
Дата: 14.01.2009 12:19:21
renaton
Вот более достоверный код и более сокращенно (как в приведеном выше примере)... но все равно не работает :(
CREATE TRIGGER [InsInRegVal] ON [dbo].[OBJ_PARAMETER_VALUE_REG]
AFTER INSERT NOT FOR REPLICATION
AS
BEGIN
  SET NOCOUNT ON;

  INSERT INTO [dbo].[OBJ_PARAMETER_VALUE_test] ([VALUE], [TIMESTAMP], [OBJ_PARAMETER_ID])
  SELECT ins.[VALUE], DATEADD (minute, 30, ins.[TIMEVALUE]), par.[OBJ_PARAMETER_ID]
  FROM inserted ins
    INNER JOIN [dbo].[LINK_PAR_RECID] par 
		ON ins.[REC_ID] = par.[REC_ID]
END
Попробуйте вставить, немного поменяв триггер:
ALTER TRIGGER [InsInRegVal] ON [dbo].[OBJ_PARAMETER_VALUE_REG]
AFTER INSERT NOT FOR REPLICATION
AS
BEGIN
  SET NOCOUNT ON;

  SELECT ins.[VALUE], DATEADD (minute, 30, ins.[TIMEVALUE]), par.[OBJ_PARAMETER_ID]
  FROM inserted ins
    INNER JOIN [dbo].[LINK_PAR_RECID] par 
		ON ins.[REC_ID] = par.[REC_ID];

  INSERT INTO [dbo].[OBJ_PARAMETER_VALUE_test] ([VALUE], [TIMESTAMP], [OBJ_PARAMETER_ID])
  SELECT ins.[VALUE], DATEADD (minute, 30, ins.[TIMEVALUE]), par.[OBJ_PARAMETER_ID]
  FROM inserted ins
    INNER JOIN [dbo].[LINK_PAR_RECID] par 
		ON ins.[REC_ID] = par.[REC_ID]
END
Возвращается что-нибудь, если выполнить вставку из QA или MS SQL SMS?
renaton
Дата: 14.01.2009 12:21:02
Glory
renaton
Вот более достоверный код и более сокращенно (как в приведеном выше примере)... но все равно не работает :(

И каков ваш метод определения работает/неработает ? Это дебаггер ? Профайлер ? Отладочный вывод ?

а как смотреть отладочный вывод?:(
Glory
Дата: 14.01.2009 12:22:47
renaton
Glory
renaton
Вот более достоверный код и более сокращенно (как в приведеном выше примере)... но все равно не работает :(

И каков ваш метод определения работает/неработает ? Это дебаггер ? Профайлер ? Отладочный вывод ?

а как смотреть отладочный вывод?:(

Для начала поместить его в нужное место. В триггер, например