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

Откуда:
Сообщений: 5
Приветствую. У меня похожая проблема как в этой теме https://www.sql.ru/forum/1254956/trigger-instead-of только мне нужно править события двухдневной (или пятидневной не важно) давности. По факту нужно изменять строки с поздним приходом и ранним выходом. Т.е. не нужно срабатывание триггера апдейтить, а нужно просто выделить строки за последние два месяца и скорректировать, первый вход и последний выход (именно они в отчет попадают). Такая сложность требуется для того, чтобы исполнитель смотрящий в монитор событий не спалил контору. Но и на этом еще не всё, применять скрипт нужно лишь для избранных пользователей, это совсем не понятно как это сделать, знаю лишь то, что их данные живут в таблице dbo.pList как её связать с dbo.pLogData? Входов и выходов всего два, это не особо упрощает задачу но всё же :-) В SQL я тоже чуть ли не впервые ковыряюсь, очень нуждаюсь в вашей помощи. Пока попытался взять код парня из темы, о которой писал выше, но даже он не работает:

USE [Orion3]
GO
/****** Object:  Trigger [dbo].[trpTimeLogData_Inserted_Updated]    Script Date: 03/28/2017 16:51:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*ALTER trigger [dbo].[trpTimeLogData_Inserted_Updated] on [dbo].[pLogData]
instead of insert
as
begin
set nocount on;*/

insert into [dbo].[pLogData]
(
TimeVal
, NumCom
, IDComp
, Par1
, Par2
, Par3
, Par4
, Event
, IndexKey
, RazdIndex
, HozOrgan
, HozGuest
, Remark
, DoorIndex
, Mode
, DeviceTime
, VEvent
, ZReserv
, ZoneIndex
, ReaderIndex
, Sign
, tpRzdIndex
, tpPar4
, IndexZone
, tpIndex
, GUID)
select
case
 
when
(HozOrgan = '49' or HozOrgan = '40')
and  (CAST (timeval as time) between  '09:05:00' and '10:30:59')
and (Remark LIKE '%2: Вход%' or Remark LIKE '6: Вход   Вход 2,   Считыватель 1, Прибор 6' or Remark LIKE '2: Вход   Вход 1,   Считыватель 2, Прибор 2')
then DATEADD (minute, DATEPART (minute, timeval) % 10 + 20 - DATEPART (minute, timeval), timeval)

when
(HozOrgan = '49' or HozOrgan = '40')
and  (CAST (timeval as time) between  '17:30:00' and '17:59:59')
and (Remark LIKE '6: Выход   Вход 2,   Считыватель 2, Прибор 6' or Remark LIKE '2: Выход   Вход 1,   Считыватель 2, Прибор 2')
then DATEADD (minute, DATEPART (minute, timeval) % 10 + 5 + DATEPART (hour, timeval), timeval)

else [TimeVal]
end
, [NumCom]
, [IDComp]
, [Par1]
, [Par2]
, [Par3]
, [Par4]
, [Event]
, [IndexKey]
, [RazdIndex]
, [HozOrgan]
, [HozGuest]
, [Remark]
, [DoorIndex]
, [Mode]
, [DeviceTime]
, [VEvent]
, [ZReserv]
, [ZoneIndex]
, [ReaderIndex]
, [Sign]
, [tpRzdIndex]
, [tpPar4]
, [IndexZone]
, [tpIndex]
, [GUID]
from inserted
end


Пишет: "Сообщение 102, уровень 15, состояние 1, строка 78
Неправильный синтаксис около конструкции "end"."
3 окт 18, 12:06    [21693891]     Ответить | Цитировать Сообщить модератору
 Re: Обмануть СКУД На SQL  [new]
Посетитель
Member

Откуда:
Сообщений: 1209
+
basick
Приветствую. У меня похожая проблема как в этой теме https://www.sql.ru/forum/1254956/trigger-instead-of только мне нужно править события двухдневной (или пятидневной не важно) давности. По факту нужно изменять строки с поздним приходом и ранним выходом. Т.е. не нужно срабатывание триггера апдейтить, а нужно просто выделить строки за последние два месяца и скорректировать, первый вход и последний выход (именно они в отчет попадают). Такая сложность требуется для того, чтобы исполнитель смотрящий в монитор событий не спалил контору. Но и на этом еще не всё, применять скрипт нужно лишь для избранных пользователей, это совсем не понятно как это сделать, знаю лишь то, что их данные живут в таблице dbo.pList как её связать с dbo.pLogData? Входов и выходов всего два, это не особо упрощает задачу но всё же :-) В SQL я тоже чуть ли не впервые ковыряюсь, очень нуждаюсь в вашей помощи. Пока попытался взять код парня из темы, о которой писал выше, но даже он не работает:

USE [Orion3]
GO
/****** Object:  Trigger [dbo].[trpTimeLogData_Inserted_Updated]    Script Date: 03/28/2017 16:51:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*ALTER trigger [dbo].[trpTimeLogData_Inserted_Updated] on [dbo].[pLogData]
instead of insert
as
begin
set nocount on;*/

insert into [dbo].[pLogData]
(
TimeVal
, NumCom
, IDComp
, Par1
, Par2
, Par3
, Par4
, Event
, IndexKey
, RazdIndex
, HozOrgan
, HozGuest
, Remark
, DoorIndex
, Mode
, DeviceTime
, VEvent
, ZReserv
, ZoneIndex
, ReaderIndex
, Sign
, tpRzdIndex
, tpPar4
, IndexZone
, tpIndex
, GUID)
select
case
 
when
(HozOrgan = '49' or HozOrgan = '40')
and  (CAST (timeval as time) between  '09:05:00' and '10:30:59')
and (Remark LIKE '%2: Вход%' or Remark LIKE '6: Вход   Вход 2,   Считыватель 1, Прибор 6' or Remark LIKE '2: Вход   Вход 1,   Считыватель 2, Прибор 2')
then DATEADD (minute, DATEPART (minute, timeval) % 10 + 20 - DATEPART (minute, timeval), timeval)

when
(HozOrgan = '49' or HozOrgan = '40')
and  (CAST (timeval as time) between  '17:30:00' and '17:59:59')
and (Remark LIKE '6: Выход   Вход 2,   Считыватель 2, Прибор 6' or Remark LIKE '2: Выход   Вход 1,   Считыватель 2, Прибор 2')
then DATEADD (minute, DATEPART (minute, timeval) % 10 + 5 + DATEPART (hour, timeval), timeval)

else [TimeVal]
end
, [NumCom]
, [IDComp]
, [Par1]
, [Par2]
, [Par3]
, [Par4]
, [Event]
, [IndexKey]
, [RazdIndex]
, [HozOrgan]
, [HozGuest]
, [Remark]
, [DoorIndex]
, [Mode]
, [DeviceTime]
, [VEvent]
, [ZReserv]
, [ZoneIndex]
, [ReaderIndex]
, [Sign]
, [tpRzdIndex]
, [tpPar4]
, [IndexZone]
, [tpIndex]
, [GUID]
from inserted
end



Пишет: "Сообщение 102, уровень 15, состояние 1, строка 78
Неправильный синтаксис около конструкции "end"."


ну вы или begin раскомментируйте или end закомментируйте
3 окт 18, 12:14    [21693905]     Ответить | Цитировать Сообщить модератору
 Re: Обмануть СКУД На SQL  [new]
basick
Member

Откуда:
Сообщений: 5
Ой точно. А по остальному как это реализовать?
3 окт 18, 13:13    [21693993]     Ответить | Цитировать Сообщить модератору
 Re: Обмануть СКУД На SQL  [new]
basick
Member

Откуда:
Сообщений: 5
basick
Ой точно. А по остальному как это реализовать?

USE [Orion3]
GO
/****** Object:  Trigger [dbo].[trpTimeLogData_Inserted_Updated]    Script Date: 03/28/2017 16:51:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[trpTimeLogData_Inserted_Updated] on [dbo].[pLogData]
instead of insert
as
begin
set nocount on;

insert into [dbo].[pLogData]
(
TimeVal
, NumCom
, IDComp
, Par1
, Par2
, Par3
, Par4
, Event
, IndexKey
, RazdIndex
, HozOrgan
, HozGuest
, Remark
, DoorIndex
, Mode
, DeviceTime
, VEvent
, ZReserv
, ZoneIndex
, ReaderIndex
, Sign
, tpRzdIndex
, tpPar4
, IndexZone
, tpIndex
, GUID)
select
case
 
when
(HozOrgan = '49' or HozOrgan = '40')
and  (CAST (timeval as time) between  '09:05:00' and '10:30:59')
and (Remark LIKE '%2: Вход%' or Remark LIKE '6: Вход   Вход 2,   Считыватель 1, Прибор 6' or Remark LIKE '2: Вход   Вход 1,   Считыватель 2, Прибор 2')
then DATEADD (minute, DATEPART (minute, timeval) % 10 + 20 - DATEPART (minute, timeval), timeval)

when
(HozOrgan = '49' or HozOrgan = '40')
and  (CAST (timeval as time) between  '17:30:00' and '17:59:59')
and (Remark LIKE '6: Выход   Вход 2,   Считыватель 2, Прибор 6' or Remark LIKE '2: Выход   Вход 1,   Считыватель 2, Прибор 2')
then DATEADD (minute, DATEPART (minute, timeval) % 10 + 5 + DATEPART (hour, timeval), timeval)

else [TimeVal]
end
, [NumCom]
, [IDComp]
, [Par1]
, [Par2]
, [Par3]
, [Par4]
, [Event]
, [IndexKey]
, [RazdIndex]
, [HozOrgan]
, [HozGuest]
, [Remark]
, [DoorIndex]
, [Mode]
, [DeviceTime]
, [VEvent]
, [ZReserv]
, [ZoneIndex]
, [ReaderIndex]
, [Sign]
, [tpRzdIndex]
, [tpPar4]
, [IndexZone]
, [tpIndex]
, [GUID]
from inserted
end

Всё раскомментил но теперь вот так:
Сообщение 8197, уровень 16, состояние 4, процедура trpTimeLogData_Inserted_Updated, строка 1
Объект "dbo.pLogData" не существует или недопустим в этой операции.
3 окт 18, 13:19    [21694001]     Ответить | Цитировать Сообщить модератору
 Re: Обмануть СКУД На SQL  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2394
basick
Т.е. не нужно срабатывание триггера апдейтить, а нужно просто выделить строки за последние два месяца и скорректировать,

так зачем вы тогда триггер меняете? update сделайте и на джоб повесьте
3 окт 18, 14:43    [21694142]     Ответить | Цитировать Сообщить модератору
 Re: Обмануть СКУД На SQL  [new]
basick
Member

Откуда:
Сообщений: 5
ДА я бы с радостью да не нзаю как, но нужно и строки лишь за два месяца а самое главное на определенных пользователей системы а не на всех
3 окт 18, 15:13    [21694190]     Ответить | Цитировать Сообщить модератору
 Re: Обмануть СКУД На SQL  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2394
basick
ДА я бы с радостью да не нзаю как, но нужно и строки лишь за два месяца а самое главное на определенных пользователей системы а не на всех


"надо украсть со склада две бутылки водки, но т.к. не знаю как пытаюсь сломать складской транспортер"

update [pLogData]
set 
[первый вход] = ...
, [последний выход] = ...
where 
[дата] >=@два месяц@
and
[пользователь] in (определенных пользователей системы)
3 окт 18, 15:52    [21694247]     Ответить | Цитировать Сообщить модератору
 Re: Обмануть СКУД На SQL  [new]
basick
Member

Откуда:
Сообщений: 5
Уже яснее, но общая логика понятна. Не совсем понимаю как взять данные из другой таблицы (фамилия или ID пользователя) и чтобы они совпадали с данными проходов. Но всё же попытаюсь сейчас накарябать код
4 окт 18, 09:37    [21694821]     Ответить | Цитировать Сообщить модератору
 Re: Обмануть СКУД На SQL  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2394
basick
Не совсем понимаю как взять данные из другой таблицы

https://ru.wikipedia.org/wiki/Join_(SQL)
5 окт 18, 12:05    [21696215]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить