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

Откуда:
Сообщений: 52
Давно не занимался разработкой под MS SQL (последний раз работал аж MS SQL 2000) Нужно сделать простой тригер который должен раскладывать данные о движениях в целевые таблицы.

Раньше я делал это при помощи тригера:


CREATE TRIGGER dbo.income 
   ON  dbo.ev
   AFTER  INSERT,UPDATE
AS 
BEGIN
	SET NOCOUNT ON;

declare curs_srs CURSOR FOR 
(select src.[ID1C]
     -- ,src.[ID1C_EV]
      --,src.[EV_TYPE]
      ,src.[DOC1CNUUM]
      ,src.[ID1C_ITEMTYPE]
      ,src.[ITEMTYPE]
      ,src.[MANUFNUM]
      ,src.[ID1C_VENDOR]
      ,src.[ID1C_VENDOR_EV]
      ,src.[VENDOR_DOCID]
      ,src.[VENDOR_DOCNUM]
      ,src.[ID1C_VENDOR_SA]
      ,src.[VENDOR_SA_DOCID]
      ,src.[VENDOR_SA_DOCNUM]
      ,src.[VENDOR_DT]
      ,src.[ID1C_VENDOR_ORG]
      ,src.[VENDOR_ORGID]  from inserted as src  order by ev_datetime )
OPEN curs_srs


Сейчас на попробовал реализовать это на Microsoft SQL Server 2016 (SP1-CU4)
Получаю "Msg 156, Level 15, State 1, Line 30
Incorrect syntax near the keyword 'order'.
"
При чем начал копать наткнулся в BOL что теперь и сортированные View делать нельзя.

Мне критично что бы в курсоре события выстроились в хронологическом порядке.
Есть какое то более элегантное решение чем переложить inserted в временную таблицу с кластерным индексом( и то не уверен можно ли присобачить к временной таблице кластерный индекс) и селектить от туда ?
23 апр 18, 13:41    [21360674]     Ответить | Цитировать Сообщить модератору
 Re: Order By в declare CURSOR FOR  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4536
PSD, скобки убериТе
23 апр 18, 13:46    [21360705]     Ответить | Цитировать Сообщить модератору
 Re: Order By в declare CURSOR FOR  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
а если cte ?
23 апр 18, 13:46    [21360707]     Ответить | Цитировать Сообщить модератору
 Re: Order By в declare CURSOR FOR  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
=)
синтаксис же
23 апр 18, 13:46    [21360711]     Ответить | Цитировать Сообщить модератору
 Re: Order By в declare CURSOR FOR  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2375
PSD,

про синтаксис написали.

но, курсор в триггере?? и это "простейшее"?может можно без него все таки?
23 апр 18, 13:58    [21360791]     Ответить | Цитировать Сообщить модератору
 Re: Order By в declare CURSOR FOR  [new]
PSD
Member

Откуда:
Сообщений: 52
Мда тупанул, видимо руки без практики потихоньку сползли нуже чем нужно....
Вот так то почему то работало

declare curs_srs CURSOR FOR 
(select src.[ID1C]
     -- ,src.[ID1C_EV]
      --,src.[EV_TYPE]
      ,src.[DOC1CNUUM]
      ,src.[ID1C_ITEMTYPE]
      ,src.[ITEMTYPE]
      ,src.[MANUFNUM]
      ,src.[ID1C_VENDOR]
      ,src.[ID1C_VENDOR_EV]
      ,src.[VENDOR_DOCID]
      ,src.[VENDOR_DOCNUM]
      ,src.[ID1C_VENDOR_SA]
      ,src.[VENDOR_SA_DOCID]
      ,src.[VENDOR_SA_DOCNUM]
      ,src.[VENDOR_DT]
      ,src.[ID1C_VENDOR_ORG]
      ,src.[VENDOR_ORGID]  from inserted as src  )
23 апр 18, 14:01    [21360810]     Ответить | Цитировать Сообщить модератору
 Re: Order By в declare CURSOR FOR  [new]
PSD
Member

Откуда:
Сообщений: 52
StarikNavy
PSD,

про синтаксис написали.

но, курсор в триггере?? и это "простейшее"?может можно без него все таки?


Самому не очень нравится.

В эту таблицу шина скидывает события, мне нужно каждую строку обрабатывать отдельно и в зависимости от данных складывать в разные поля и разные таблицы... При этом кроме всего прочего в если одном пакете оказались 2 события по одному объекту мне их нужно последовательно к этому объекту применить.
Есть какое то более красивое решение чем курсор для данной задачи?
К счастью это не целевое решение, а временный костыль чтобы подготовить данные для заливки в систему принятия решений
23 апр 18, 14:07    [21360842]     Ответить | Цитировать Сообщить модератору
 Re: Order By в declare CURSOR FOR  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30806
PSD
Есть какое то более красивое решение чем курсор для данной задачи?
Ну как, очевидно, insert/update/delete из inserted

Другое дело, что если какой то код уже накарябан, и он устраивает, то можно и оставить, если это временное решение.
23 апр 18, 15:25    [21361393]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить