Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обмануть СКУД На SQL / 9 сообщений из 9, страница 1 из 1
03.10.2018, 12:06
    #39712342
basick
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обмануть СКУД На SQL
Приветствую. У меня похожая проблема как в этой теме 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
03.10.2018, 12:14
    #39712351
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обмануть СКУД На SQL
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
03.10.2018, 13:13
    #39712389
basick
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обмануть СКУД На SQL
Ой точно. А по остальному как это реализовать?
...
Рейтинг: 0 / 0
03.10.2018, 13:19
    #39712396
basick
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обмануть СКУД На SQL
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
03.10.2018, 14:43
    #39712470
StarikNavy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обмануть СКУД На SQL
basick Т.е. не нужно срабатывание триггера апдейтить, а нужно просто выделить строки за последние два месяца и скорректировать,
так зачем вы тогда триггер меняете? update сделайте и на джоб повесьте
...
Рейтинг: 0 / 0
03.10.2018, 15:13
    #39712494
basick
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обмануть СКУД На SQL
ДА я бы с радостью да не нзаю как, но нужно и строки лишь за два месяца а самое главное на определенных пользователей системы а не на всех
...
Рейтинг: 0 / 0
03.10.2018, 15:52
    #39712522
StarikNavy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обмануть СКУД На SQL
basickДА я бы с радостью да не нзаю как, но нужно и строки лишь за два месяца а самое главное на определенных пользователей системы а не на всех

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

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


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