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

Откуда:
Сообщений: 545
Есть триггер. На SQL SERVER 2005 работает на ура, а SQL SERVER 2000 не срабатывает не видит INSERT в таблицу. По чему так?

+ код триггера

USE [FleetLog07]
GO
/****** Object:  Trigger [dbo].[InsertMess]    Script Date: 07/29/2011 12:15:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER TRIGGER [dbo].[InsertMess]
   ON  [dbo].[UplinkMsgLog]
   FOR INSERT, UPDATE
AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	INSERT	[temp_report].[dbo].[Position]
			([version]
           ,[unitid]
           ,[receivedOn]
           ,[sendOn]
           ,[latitude]
           ,[longitude]
           ,[speed]
           ,[course]
           ,[ignition])
	SELECT	'303'
           ,[RMUId]
           ,dateadd(hh,-4,[CellDateTime])
           ,[GPSDateTime]
           ,[GPSY] / -100000.0
           ,[GPSX] / 100000.0
           ,[Speed]
           ,[Direction]
           ,[EngineOn]
	FROM inserted
	WHERE [GPSDateTime] IS NOT NULL 
END

29 июл 11, 12:37    [11044355]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
"не видит INSERT в таблицу" - это такое сообщение об ошибке?
29 июл 11, 12:42    [11044418]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
проверить данные. "не срабатывает" он если не выполняется "WHERE [GPSDateTime] IS NOT NULL"
29 июл 11, 12:43    [11044427]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
2king2
Member

Откуда:
Сообщений: 545
Гавриленко Сергей Алексеевич, Crimean,

Ошибок нет. Таблица источник постоянно пополняется данными, а таблица куда должен писать триггер пуста. Условие совсем убирал, не помогло, результат тот же - пустая таблица.
29 июл 11, 12:47    [11044462]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
2king2
Есть триггер. На SQL SERVER 2005 работает на ура, а SQL SERVER 2000 не срабатывает не видит INSERT в таблицу. По чему так?

+
+ код триггера

USE [FleetLog07]
GO
/****** Object:  Trigger [dbo].[InsertMess]    Script Date: 07/29/2011 12:15:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER TRIGGER [dbo].[InsertMess]
   ON  [dbo].[UplinkMsgLog]
   FOR INSERT, UPDATE
AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	INSERT	[temp_report].[dbo].[Position]
			([version]
           ,[unitid]
           ,[receivedOn]
           ,[sendOn]
           ,[latitude]
           ,[longitude]
           ,[speed]
           ,[course]
           ,[ignition])
	SELECT	'303'
           ,[RMUId]
           ,dateadd(hh,-4,[CellDateTime])
           ,[GPSDateTime]
           ,[GPSY] / -100000.0
           ,[GPSX] / 100000.0
           ,[Speed]
           ,[Direction]
           ,[EngineOn]
	FROM inserted
	WHERE [GPSDateTime] IS NOT NULL 
END



К сообщению приложен файл. Размер - 29Kb
29 июл 11, 12:48    [11044474]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
2king2
Гавриленко Сергей Алексеевич, Crimean,

Ошибок нет. Таблица источник постоянно пополняется данными, а таблица куда должен писать триггер пуста. Условие совсем убирал, не помогло, результат тот же - пустая таблица.
База не та. Сервер не тот. Ну, триггера еще можно выключать.
29 июл 11, 12:51    [11044492]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
2king2
Member

Откуда:
Сообщений: 545
Гавриленко Сергей Алексеевич
2king2
Гавриленко Сергей Алексеевич, Crimean,

Ошибок нет. Таблица источник постоянно пополняется данными, а таблица куда должен писать триггер пуста. Условие совсем убирал, не помогло, результат тот же - пустая таблица.
База не та. Сервер не тот. Ну, триггера еще можно выключать.


Если вырезать кусок из триггера и исполнить в обычном запрос то все работает.
29 июл 11, 12:53    [11044509]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
2king2
Гавриленко Сергей Алексеевич
пропущено...
База не та. Сервер не тот. Ну, триггера еще можно выключать.


Если вырезать кусок из триггера и исполнить в обычном запрос то все работает.
Да что вы говорите. Прям вот с таблице inserted?
29 июл 11, 12:53    [11044514]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
У вас там условие, кстати, GPSDateTime is not null.
29 июл 11, 12:54    [11044524]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
2king2
Member

Откуда:
Сообщений: 545
Гавриленко Сергей Алексеевич
Да что вы говорите. Прям вот с таблице inserted?


Не :) полный путь пишу.
29 июл 11, 12:56    [11044541]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
2king2
Member

Откуда:
Сообщений: 545
А может быть так что INSERT не заканчивается и из-за этого событие по которому тригер должен сработать не наступает?
29 июл 11, 14:09    [11045154]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Задизэйблен триггер наверно.
Проверьте, он вообще когда-нибудь вызывается?
29 июл 11, 14:46    [11045463]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
2king2
Member

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

Энейбл, но никогда не выполняется. Наверно таблица лочится, открывается транкзация и не закрывается идет постоянная запись данных в таблицу. Может есть какая то степень защищенности которую триггер пройти не может, а обыкновенный селект может и то не всегда?
29 июл 11, 15:05    [11045584]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
alexeyvg
Member

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

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

Просто повнимательнее посмотрите.
29 июл 11, 15:06    [11045595]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
1 запись вставьте для пробы

begin tran

insert

rollback

увидите, срабатывает или нет :)
29 июл 11, 15:06    [11045596]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31961
2king2
Энейбл, но никогда не выполняется.
поставьте в триггер raiserror в начале - и проверьте, выполняется он или нет.

Профайлер тоже помогает при чудесах.

Короче, просто потратьте 10 минут на отладку.
29 июл 11, 15:07    [11045607]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
2king2
Member

Откуда:
Сообщений: 545
Crimean
1 запись вставьте для пробы

begin tran

insert

rollback

увидите, срабатывает или нет :)


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

alexeyvg
2king2
Энейбл, но никогда не выполняется.
поставьте в триггер raiserror в начале - и проверьте, выполняется он или нет.

Профайлер тоже помогает при чудесах.

Короче, просто потратьте 10 минут на отладку.


2000 SQL Server не поддерживает отладку
29 июл 11, 15:14    [11045667]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
2king2
alexeyvg
пропущено...
поставьте в триггер raiserror в начале - и проверьте, выполняется он или нет.

Профайлер тоже помогает при чудесах.

Короче, просто потратьте 10 минут на отладку.


2000 SQL Server не поддерживает отладку
То что вам предлагают - поддерживает.
29 июл 11, 15:20    [11045701]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
2king2
Member

Откуда:
Сообщений: 545
alexeyvg
поставьте в триггер raiserror в начале - и проверьте, выполняется он или нет.


Сделал, треггре вообще не выполняется. Перенес логику на джеб, там работает.
29 июл 11, 15:41    [11045892]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
alter table [dbo].[InsertMess] enable trigger all
?
29 июл 11, 15:44    [11045919]     Ответить | Цитировать Сообщить модератору
 Re: В чем разница триггеров в SQL SERVER 2000 и SQL SERVER 2005?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31961
2king2
2000 SQL Server не поддерживает отладку
Я же сказал, как отладить.

Все компы и ОС поддерживают отладку, даже задолго до изобретеня перфокарт поддерживали.

А уж во времена клавиатур, дисплеев и 2000 SQL Server - тем более.

Варианты:
- запустить профайлер
- вставить отладочный вывод

2king2
alexeyvg
поставьте в триггер raiserror в начале - и проверьте, выполняется он или нет.


Сделал, треггре вообще не выполняется.
Значит, либо триггер не на ту таблицу, либо не на ту базу (сервер), либо выключен.
2king2
Перенес логику на джеб, там работает.
Ага, а когда джоб перестанет работать, ещё что нибуть придумаете :-)
29 июл 11, 16:08    [11046130]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить