Как установить и проверить значение переменной из вставленной таблицы в T- SQL? - PullRequest
0 голосов
/ 09 марта 2020

Я создал триггер для вставки данных в таблицу путем проверки поля состояния из другой таблицы.

CREATE trigger [dbo].[insercionVentasConcluidadas]

on [dbo].[pedido]
after update
as 
declare @fechaactual date
declare @estado varchar
begin 
    if UPDATE(estado)
    begin 
        select @estado = estado from inserted;

        set @fechaactual = GETDATE();
        if (@estado = 'cerrado')
        print N'RAS'
        begin

            insert into ventaConcluida(numeroPedido, nombreCliente, nombreProveedor, fechaCreacion, fechaCierre, diasTranscurridos, MontoPedido)
            select d.idPedido, d.nombreCliente, d.nombreProveedor, d.fechaPedido, @fechaactual, dbo.calculoDias(d.fechaPedido, @fechaactual),
                    d.montoPedido
            from inserted i 
            inner join deleted d
            on i.idPedido = d.idPedido

        end
    end 
end

Что должен сделать триггер, это вставить данные в таблицу, когда переменная @estado равна cerrado после обновления другой таблицы с именем pedido, когда статус в этой таблице = cerrado, и он устанавливает значение с select @estado = estado from inserted;, где допустимые значения только cerrado, creado and parcial, но фактически он вставляется в любой из этих состояний , поэтому я думаю, что проблема может быть в установке переменной или проверке значения if (@estado = 'cerrado'). Другая проблема заключается в том, что он вставляет данные только с добавлением строки print N'RAS', а когда запускается триггер, он вставляет данные, но не печатает строку.

1 Ответ

1 голос
/ 09 марта 2020

Это слишком долго для комментария, но достаточно важно, чтобы вам нужно было его четко понимать. Вы имеете (сжато для ясности):

   if (@estado = 'cerrado')
    print N'RAS'
    begin
      <do stuff>
    end

Это точно так же, как:

   if (@estado = 'cerrado')
       print N'RAS'; 

   begin
      <do stuff>
   end; 

Ваш блок начала / конца не имеет отношения к оператору IF. Единственное, что делает ваш код на основе оператора IF, - это печать, которая следует за ним. И обратите внимание, что производственный триггер никогда не должен пытаться вернуть наборы результатов или распечатать. Это может быть хорошо для разработки и отладки, но не в рабочем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...