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

Откуда:
Сообщений: 5
Всем доброго времени суток
Ребята, подскажите, пожалуйста, может ли данный тирггер разрушить базу данных Navision

Триггер
Create trigger Test
ON dbo.[Cronus$Sales Header]
AFTER INSERT,UPDATE
AS
BEGIN
declare @d int
select @d = count(*) from deleted
if @d = 0 begin
Insert into _Log(Order,Status,[Event],Createdate,HostName,UserName)
select [No_],[Status],'Ins',getdate(),host_name(),system_user from inserted
end else begin
if Update([Status]) begin
Insert into _Log(Order,Status,[Event],Createdate,HostName,UserName)
select [No_],[Status],'Upd',getdate(),host_name(),system_user from inserted
end
end
END
GO

таблица _Log - это SQL таблица, не Navision
id int identity(1,1) PK
,Order varchar(50)
,Status int
,[Event] varchar(5)
,Createdate datetime
,HostName varchar(50)
,UserName varchar(50)
На таблице _Log нет триггеров.
28 мар 14, 07:05    [15798546]     Ответить | Цитировать Сообщить модератору
 Re: SQL триггер и Nav  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Что вы имеете в виду под словом "разрушить"?
28 мар 14, 07:30    [15798583]     Ответить | Цитировать Сообщить модератору
 Re: SQL триггер и Nav  [new]
kiffv
Member

Откуда:
Сообщений: 5
Здравствуйте! Т.е. Сломать базу данных-если коннектиться из navision будет говорить, что база повреждена.
28 мар 14, 09:13    [15798784]     Ответить | Цитировать Сообщить модератору
 Re: SQL триггер и Nav  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А navision что при каждом коннекте DBCC CHECKDB делает?
28 мар 14, 09:20    [15798805]     Ответить | Цитировать Сообщить модератору
 Re: SQL триггер и Nav  [new]
MihaZ
Member

Откуда: СПб
Сообщений: 17
kiffv, вообще нет, т.к. данный триггер не затрагивает данные таблицы dbo.[Cronus$Sales Header]
28 мар 14, 09:40    [15798864]     Ответить | Цитировать Сообщить модератору
 Re: SQL триггер и Nav  [new]
Glory
Member

Откуда:
Сообщений: 104751
kiffv
Сломать базу данных-если коннектиться из navision будет говорить, что база повреждена.

Ни одна команда в TSQL не имеет функционала для повреждения базы.
28 мар 14, 10:17    [15799011]     Ответить | Цитировать Сообщить модератору
 Re: SQL триггер и Nav  [new]
kiffv
Member

Откуда:
Сообщений: 5
Спасибо большое!
28 мар 14, 10:17    [15799013]     Ответить | Цитировать Сообщить модератору
 Re: SQL триггер и Nav  [new]
o-o
Guest
Glory
Ни одна команда в TSQL не имеет функционала для повреждения базы.


+
недокументированная, но имеется.
и как раз для повреждения базы (хотя и не только для этого) -- открытым текстом сказано:

The purposes of DBCC WRITEPAGE are:

To allow automated testing of DBCC CHECKDB and repair by the SQL Server team.
To engineer corruptions for demos and testing.
To allow for last-ditch disaster recovery by manually editing a live, corrupt database.
28 мар 14, 13:47    [15800631]     Ответить | Цитировать Сообщить модератору
 Re: SQL триггер и Nav  [new]
Добрый эхх..
Guest
В теории нет. Но на практике случиться может всякое, так как сам клиент не знает что происходит в триггере. Не советую делать это, и ни один из моих коллег не поддержали данную идею в свое время.
29 мар 14, 14:44    [15804912]     Ответить | Цитировать Сообщить модератору
 Re: SQL триггер и Nav  [new]
Смотрелка
Guest
Судя по коду триггера, это лог. Записывает, кто вставил данные или изменил поле статус. Поэтому не думаю, что данный триггер может привести к проблемам (только база будет увеличиваться). Если на таблице _Log действительно нет триггеров, которые вставляют данные или изменяют поле Status в таблице [Cronus$Sales Header], что приведет к зацикливанию. То почему бы и нет.

Исходя из особенностей работы с Navision, если поменять структуру таблицы(например, добавить поле) через SQL, то да база данных будет повреждена.
Но исходя из определения триггера
Это отдельный объект БД

Также у NAV нет проверки целостности на уровне БД (констрейны, внешние ключи). Поэтому, да, я соглашусь, что триггера лучше не использовать для каких-либо манипуляций с таблицами Navision. Но если разбирать данный триггер. Такой может существовать. Он не изменяет данных в таблицах NAV

Добрый эхх..
В теории нет. Но на практике случиться может всякое, так как сам клиент не знает что происходит в триггере. Не советую делать это, и ни один из моих коллег не поддержали данную идею в свое время.


Попробовала создать. Все работает.
29 мар 14, 17:56    [15805391]     Ответить | Цитировать Сообщить модератору
 Re: SQL триггер и Nav  [new]
kiffv
Member

Откуда:
Сообщений: 5
Еще раз всем спасибо.
Уже все работает
29 мар 14, 18:18    [15805472]     Ответить | Цитировать Сообщить модератору
 Re: SQL триггер и Nav  [new]
добрый эхх..
Guest
Смотрелка,
Дело не в коде триггера, а в идеологии его существования как такового.
И что значит попробовала и работает? А почему не должно работать? Не будет никаких проблем если данные будут вставляться даже в таблицы navision. Проблемы возникнут после, когда про триггер благополучно забудут. Когда в таблицу лог будут писаться данные и из других мест. Особенно с мест выраженных длительными транзакциями. Когда изменения в 36й таблице будут происходить в разном порядке и приводить к дедлокам. Вы проверили все эти нюансы? Пробовали пакетно вставлять данные? Тестирование предполагает проверку всех аспектов связанных со взаимодействием 36 таблицы и таблицы лога. Не усложняйте и без того непростую жизнь разработчиков.
29 мар 14, 18:33    [15805510]     Ответить | Цитировать Сообщить модератору
 Re: SQL триггер и Nav  [new]
Смотрелка
Guest
добрый эхх..
Смотрелка,
Дело не в коде триггера, а в идеологии его существования как такового.
И что значит попробовала и работает? А почему не должно работать? Не будет никаких проблем если данные будут вставляться даже в таблицы navision. Проблемы возникнут после, когда про триггер благополучно забудут. Когда в таблицу лог будут писаться данные и из других мест. Особенно с мест выраженных длительными транзакциями. Когда изменения в 36й таблице будут происходить в разном порядке и приводить к дедлокам. Вы проверили все эти нюансы? Пробовали пакетно вставлять данные? Тестирование предполагает проверку всех аспектов связанных со взаимодействием 36 таблицы и таблицы лога. Не усложняйте и без того непростую жизнь разработчиков.


Уважаемый, добрый эхх.. оставьте вопросы идеологии и о смысле жизни философам.
А как можно забыть о тригеррах? Вам, как РАЗРАБОТЧИКУ, думаю известно, что прежде чем что-либо делать нужно смотреть и проверять за собой. Прежде чем писать в данную таблицу, хороший разработчик посмотрит откуда она заполняется. Это сделать очень легко.
Об изменениях в 36й в разном порядке, вообще, не очень понятно. Посмотрите на код триггера, относительно части изменений.

По поводу вставки данных в таблицы Navision, я с вами не согласна. Вот это действительно плохая практика. Почему я уже писала ранее.

По поводу нелегкой жизни разработчиков, не надо здесь плакаться. Это технический форум, а не психологический.
29 мар 14, 19:00    [15805569]     Ответить | Цитировать Сообщить модератору
 Re: SQL триггер и Nav  [new]
kiffv
Member

Откуда:
Сообщений: 5
Триггер создан временно. Нужно просто отследить за выходные.
Потом это все удалится. Добрый эхх... Вставок из других мест точно не будет. И, повторюсь, триггер создан временно.
Под пакетной вставкой, вы имеете ввиду массовую вставку? Да все отрабатывает и массово и по одному.

Смотрелка, спасибо за развернутые ответы.
29 мар 14, 19:05    [15805585]     Ответить | Цитировать Сообщить модератору
 Re: SQL триггер и Nav  [new]
Добрый эхх..
Guest
Смотрелка,
Вам еще учиться и учиться. Набирайтесь терпения и опыта. Последний всегда будет выручать в жизни. Удачи.
29 мар 14, 19:09    [15805601]     Ответить | Цитировать Сообщить модератору
 Re: SQL триггер и Nav  [new]
Смотрелка
Guest
Учиться если Учится это всегда правильно и хорошо! Плохо когда не хочется или заблуждаешься, что все знаешь.
Спасибо за совет. Я его всегда придерживаюсь. Добрый эхх, вам тоже удачи
29 мар 14, 19:12    [15805615]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить