Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 394
Добрый день. Есть таблица
MaterialUnits.
Единицы материалов
Столбцы

[tid] [int] IDENTITY(0,1) NOT NULL,
    [Material_id] [int] NOT NULL,
    [Unit_id] [int] NOT NULL,
    [UnitKoeff] [DECIMAL](25, 6) NOT NULL,
    [NettoWeight] [DECIMAL](25, 6) NOT NULL,
    [BruttoWeight] [DECIMAL](25, 6) NOT NULL,
    [UnitVolume] [DECIMAL](25, 6) NOT NULL,
    [IsProductionUnit] [int] NULL DEFAULT (0),
    [ResourceGroup_id] [int] NULL,
    [FormFactor_id] [int] NULL,
    [MaxWeight] [DECIMAL](25, 6) NULL,
    [LENGTH] [DECIMAL](25, 6) NULL,
    [Width] [DECIMAL](25, 6) NULL,
    [Height] [DECIMAL](25, 6) NULL,
    [RecordGUID] [VARCHAR](50) NULL,
    [IsForCalc] [int] NULL DEFAULT (0),
    [EANCode] [VARCHAR](50) NULL,
    [SmoothnessGroup_id] [int] NULL,
    [PackWeight] [DECIMAL](25, 6) NULL,
    [IsRotating] [int] NULL DEFAULT (0),
    [IsManualHandling] [int] NULL DEFAULT (0),
    [ExternalCode] [VARCHAR](300) NULL,
    [LowerMaterialUnit_id] [int] NULL,
    [PackType_id] [int] NULL,
    [OLD_ID] [int] NULL,
    [PickingGroup_id] [int] NULL,
    [OldEAN] [VARCHAR](100) NULL,
    [CargoGroup_id] [int] NULL,
    [GUID] [uniqueidentifier] NULL,
    [IsBasePackage] [bit] NOT NULL DEFAULT ((0)),
    [IsNeedRemeasure] [bit] NULL DEFAULT ((0))

Настроен триггер на апдейт

ALTER TRIGGER [dbo].[triger_MaterialUnitChahge]
ON [dbo].[MaterialUnits]
AFTER UPDATE 
AS
declare @DynamicSQL varchar(max),@Materialunit_id int
insert into MaterialUnitsChange (MaterialUnit_id, Material_id, BruttoWeight, UnitVolume, Lenght, Width, Height, UnitKoeff, RecordDate)
select tid, Material_id, BruttoWeight, UnitVolume, Length, Width, Height, UnitKoeff, getdate() from inserted


Вставляется в таблицу строка,которая меняется. Можно ли как-то параметризировать?
Т.е. чтобы подавать измененную строку на вход процедуры ?
Например так

Declare @DynamicSQ varchar(max)=null

set @DynamicSQL = 'exec INT_MaterialUnitsChange
@MaterialUnit_id = ' + cast(@CurrMaterialUnit_id as varchar(20))
Вот,как мне получить параметр @CurrMaterialUnit_id?
26 июл 17, 18:03    [20677542]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36696
Измените процедуру таким образом, чтобы она принимала на вход набор записей (через временню таблицу или параметр) и обрабатывала их пачкой. Построчная обработка -- очень медленный тормоз.

З.Ы. Но если охота садо-мазо, читать про declare cursor.
26 июл 17, 18:22    [20677601]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Максим Александровитч

Declare @DynamicSQ varchar(max)=null

set @DynamicSQL = 'exec INT_MaterialUnitsChange
@MaterialUnit_id = ' + cast(@CurrMaterialUnit_id as varchar(20))
Вот,как мне получить параметр @CurrMaterialUnit_id?


например, так:

Declare @DynamicSQL varchar(max)= ''

select @DynamicSQL += 'exec INT_MaterialUnitsChange @MaterialUnit_id = ' + cast(tid as varchar(20)) + ';' + char(13) + char(10)
from inserted
26 июл 17, 18:29    [20677621]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 394
Minamoto,

Minamoto,

Слишком мощно.
Сделал так.
Оказалось все очень просто.
ALTER TRIGGER [dbo].[triger_MaterialUnitChahge]
ON [dbo].[MaterialUnits]
AFTER UPDATE 
AS
If @@ROWCOUNT>0
insert into MaterialUnitsChange (MaterialUnit_id, Material_id, BruttoWeight, UnitVolume, Lenght, Width, Height, UnitKoeff, RecordDate)
select tid, Material_id, BruttoWeight, UnitVolume, Length, Width, Height, UnitKoeff, getdate() from inserted 

begin 
declare @DynamicSQL varchar(max),@Materialunit_id int
select  @Materialunit_id=tid from inserted
	set @DynamicSQL = 'exec INT_MaterialUnitsChange
										@MaterialUnit_id = ' + cast(@Materialunit_id as varchar(20))
	
	
	exec StartJob
		@DynamicSQL = @DynamicSQL,
		@JobType = 'IntegrationFeedBack'
		end
		
27 июл 17, 09:01    [20678592]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 394
Гавриленко Сергей Алексеевич
Измените процедуру таким образом, чтобы она принимала на вход набор записей (через временню таблицу или параметр) и обрабатывала их пачкой. Построчная обработка -- очень медленный тормоз.

З.Ы. Но если охота садо-мазо, читать про declare cursor.


А записи и будут идти построчно от 2 человек,т.к. очень медленно. Нет возможности обработать пачкой,поэтому я и смотрел в сторону триггера
27 июл 17, 09:02    [20678594]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Serп
Member

Откуда:
Сообщений: 17
Максим Александровитч,
может быть сначала сделать
SET @DateRec = getdate()

вставлять в таблицу изменений дату @DateRec, а потом написать ХП, которую вызвать с этой датой, а уже она выберет все строки с этой датой и произведет необходимые манипуляции?
27 июл 17, 09:24    [20678656]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 394
Serп,

А чем это лучше моего запроса?
27 июл 17, 09:39    [20678693]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
aleks222
Guest
Максим Александровитч
Serп,

А чем это лучше моего запроса?


Хотя бы тем, что ваш совсем никуда не годен.

Например, нафига там, ваще, динамика?
А ужо кривая динамика в авторском исполнении - совсем лишнее.
27 июл 17, 10:02    [20678754]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Максим Александровитч
Minamoto,

Minamoto,

Слишком мощно.
Сделал так.
Оказалось все очень просто.

Просто. Но неправильно.
Учтите, что inserted - это таблица. Со всеми вытекающими. Т.е. записей в ней может быть больше одной. Теперь сами подумайте, что сделает ваш код в этом случае.
27 июл 17, 10:28    [20678833]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7403
Процедура в триггере истории вообще не нужна.

Какую задачу пытается решить автор?
27 июл 17, 11:15    [20678980]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 394
Владислав Колосов,

Нужно отправлять вставленную запись в другую БД.
Вставка только по 1-й записи.В среднем раз в 3-4 секундны.
27 июл 17, 11:58    [20679223]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 394
Minamoto,

Да,конечно там 2 млн записей,но отправляю-то только вставленную.
27 июл 17, 11:58    [20679228]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 394
aleks222,

Чем динамика вредит?И почему в кривом исплнении?Правила синтаксиса не нарушены.
Я просто хочу понять и конечно же улучшить код,сделать его более оптималтым
27 июл 17, 12:01    [20679239]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
aleks222
Guest
Максим Александровитч
aleks222,

Чем динамика вредит?И почему в кривом исплнении?Правила синтаксиса не нарушены.
Я просто хочу понять и конечно же улучшить код,сделать его более оптималтым


Ты ишо не дорос.
Подрастешь - поймешь.
27 июл 17, 12:28    [20679369]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2548
Максим Александровитч,

а что мешает просто взять и вставить новые записи в другую БД одним запросом? Вроде как оптимальнее некуда. Или вы что-то не договариваете...
27 июл 17, 12:36    [20679398]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 394
PaulYoung,
Вставку в другую ИБД проще делать через процедуру,динамика,которой предславлена.
По сути,если дернуть запрос из ХП получится тоже самое.Но зачем?Если для ХП нужен 1 параметр,а для запроса больше?
27 июл 17, 12:53    [20679469]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 394
aleks222,

Окэ,так научи или эти знания под запретом и изыскиваються хз каким методом?
27 июл 17, 12:54    [20679475]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 394
PaulYoung,

Я просто не пойму хайп по повду динамики. Скорость вставки 3-4 секунды,пакетных данных нет.
Вставляется по 1 записи в силу ограничение человеГа.
В чем же проблема ?Поясните,действительно хочу понять.
27 июл 17, 12:55    [20679481]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36696
Максим Александровитч
PaulYoung,

Я просто не пойму хайп по повду динамики. Скорость вставки 3-4 секунды,пакетных данных нет.
Вставляется по 1 записи в силу ограничение человеГа.
В чем же проблема ?Поясните,действительно хочу понять.

Правильно

К сообщению приложен файл. Размер - 139Kb
27 июл 17, 12:59    [20679492]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Гавриленко Сергей Алексеевич,

а есть такая же, но что бы савсем большая :)
27 июл 17, 13:07    [20679529]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 394
Мда.Сообщество оно такое. Объяснить хер там,но говном закидать всегда пожалуйста.
27 июл 17, 14:57    [20679971]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2548
Максим Александровитч
Я просто не пойму хайп по повду динамики. Скорость вставки 3-4 секунды,пакетных данных нет.
Вставляется по 1 записи в силу ограничение человеГа.
В чем же проблема ?Поясните,действительно хочу понять.
Если коротко, то:

1. Вам стараются советовать простые и оптимальные решения
2. Пакетных данных СЕГОДНЯ нет, завтра - есть
3. Ограничения СЕГОДНЯ есть, завтра - нет
27 июл 17, 15:00    [20679981]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7403
Максим Александровитч,

Вы знаете, какие проблемы можете получить при использовании динамического запроса, прежде, чем его использовать?
27 июл 17, 15:01    [20679988]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 394
Владислав Колосов,

Нет,как сообщил один пользователь ранее-" Я слишком юн".Это верно,не возрастом,но опытом.
Если вы поясните,то я буду очень благодарен.
27 июл 17, 15:03    [20679997]     Ответить | Цитировать Сообщить модератору
 Re: риггер на апдейт определенных столбцов таблицы с объявлением параметра  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 394
PaulYoung,

Кроме совета использовать вставку напрямую,что-то не обнуружил более.
27 июл 17, 15:05    [20680006]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить