powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обмануть СКУД На SQL
9 сообщений из 9, страница 1 из 1
Обмануть СКУД На SQL
    #39712342
basick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую. У меня похожая проблема как в этой теме http://www.sql.ru/forum/1254956/trigger-instead-of только мне нужно править события двухдневной (или пятидневной не важно) давности. По факту нужно изменять строки с поздним приходом и ранним выходом. Т.е. не нужно срабатывание триггера апдейтить, а нужно просто выделить строки за последние два месяца и скорректировать, первый вход и последний выход (именно они в отчет попадают). Такая сложность требуется для того, чтобы исполнитель смотрящий в монитор событий не спалил контору. Но и на этом еще не всё, применять скрипт нужно лишь для избранных пользователей, это совсем не понятно как это сделать, знаю лишь то, что их данные живут в таблице dbo.pList как её связать с dbo.pLogData? Входов и выходов всего два, это не особо упрощает задачу но всё же :-) В SQL я тоже чуть ли не впервые ковыряюсь, очень нуждаюсь в вашей помощи. Пока попытался взять код парня из темы, о которой писал выше, но даже он не работает:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
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"."
...
Рейтинг: 0 / 0
Обмануть СКУД На SQL
    #39712351
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
basickПриветствую. У меня похожая проблема как в этой теме http://www.sql.ru/forum/1254956/trigger-instead-of только мне нужно править события двухдневной (или пятидневной не важно) давности. По факту нужно изменять строки с поздним приходом и ранним выходом. Т.е. не нужно срабатывание триггера апдейтить, а нужно просто выделить строки за последние два месяца и скорректировать, первый вход и последний выход (именно они в отчет попадают). Такая сложность требуется для того, чтобы исполнитель смотрящий в монитор событий не спалил контору. Но и на этом еще не всё, применять скрипт нужно лишь для избранных пользователей, это совсем не понятно как это сделать, знаю лишь то, что их данные живут в таблице dbo.pList как её связать с dbo.pLogData? Входов и выходов всего два, это не особо упрощает задачу но всё же :-) В SQL я тоже чуть ли не впервые ковыряюсь, очень нуждаюсь в вашей помощи. Пока попытался взять код парня из темы, о которой писал выше, но даже он не работает:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
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 закомментируйте
...
Рейтинг: 0 / 0
Обмануть СКУД На SQL
    #39712389
basick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой точно. А по остальному как это реализовать?
...
Рейтинг: 0 / 0
Обмануть СКУД На SQL
    #39712396
basick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
basickОй точно. А по остальному как это реализовать?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
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" не существует или недопустим в этой операции.
...
Рейтинг: 0 / 0
Обмануть СКУД На SQL
    #39712470
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
basick Т.е. не нужно срабатывание триггера апдейтить, а нужно просто выделить строки за последние два месяца и скорректировать,
так зачем вы тогда триггер меняете? update сделайте и на джоб повесьте
...
Рейтинг: 0 / 0
Обмануть СКУД На SQL
    #39712494
basick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДА я бы с радостью да не нзаю как, но нужно и строки лишь за два месяца а самое главное на определенных пользователей системы а не на всех
...
Рейтинг: 0 / 0
Обмануть СКУД На SQL
    #39712522
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
basickДА я бы с радостью да не нзаю как, но нужно и строки лишь за два месяца а самое главное на определенных пользователей системы а не на всех

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
update [pLogData]
set 
[первый вход] = ...
, [последний выход] = ...
where 
[дата] >=@два месяц@
and
[пользователь] in (определенных пользователей системы)
...
Рейтинг: 0 / 0
Обмануть СКУД На SQL
    #39712800
basick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже яснее, но общая логика понятна. Не совсем понимаю как взять данные из другой таблицы (фамилия или ID пользователя) и чтобы они совпадали с данными проходов. Но всё же попытаюсь сейчас накарябать код
...
Рейтинг: 0 / 0
Обмануть СКУД На SQL
    #39713472
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
basickНе совсем понимаю как взять данные из другой таблицы
https://ru.wikipedia.org/wiki/Join_(SQL)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обмануть СКУД На SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]