arvindcis Ответов: 1

Как обновить из таблицы table1 table2 в SQL с использованием курсоров и триггеров Снегурочка


Я работаю в asp.net хотите обновить записи из одной таблицы в другую. Предположим, что у пользователя есть свои данные о посещаемости в файле excel. Я сделал форму просмотра, откуда пользователь будет загружать файл excel . Он работает очень хорошо и хранит данные из excel в базу данных SQL. (Имя таблицы= Import_Attendance_imp)
Теперь я хочу обновить еще одну таблицу, где i. e TblDailyAttandence
Я использую триггер, но он обновляет только одну строку, я думаю, что должен быть использован курсор
Я понятия не имею о курсоре, как использовать курсор в моем триггере.

пожалуйста, помогите мне

спасибо заранее

Что я уже пробовал:

ALTER TRIGGER [dbo].[TRIG_Update_Attendance_imp]
На [dbo].[Import_Attendance_imp]
ПОСЛЕ ВСТАВКИ

АС

НАЧАТЬ
ОБЪЯВЛЯТЬ
@EmpCode VARCHAR(100),
@Monthyear VARCHAR(100),
@AtCol VARCHAR(100),
@Status VARCHAR(100),
@in VARCHAR(100),
@inTime VARCHAR (100),
@out VARCHAR(100),
@outTime VARCHAR(100)

Выберите @AtCol = Att,@in=[in],@inTime=inTime,@out=[out],@outTime=outTime, @EmpCode = empcode, @Status = [status],@Monthyear=Monthyear FROM INSERTED
DECLARE @query VARCHAR (MAX) = "

Набор запроса @ = 'обновление TblDailyAttandence комплект '+@AtCol+' = "'+@статус+"','+@в+' = "'+@Интайм+"','+@выход+' = "'+@outtime+"'
Где EmpCode = " '+@EmpCode+ "'и Monthyear=" '+@Monthyear+""

PRINT @query

выполнение запроса)

КОНЕЦ

ZurdoDev

Триггеры работают с наборами данных, поэтому вы никогда не захотите использовать такие переменные, потому что они будут работать только с одной записью и испортят все остальные записи во вставленных или удаленных таблицах.

Тебе не нужен спусковой крючок. В вашей процедуре обновления просто обновите таблицу посещаемости.

1 Ответов

Рейтинг:
4

NightWizzard

Курсор замедлит производительность, и в вашем случае количество обновленных записей уменьшится только до одного, потому что вы переносите значения через переменные, что уменьшает операцию чтения на временном INSERTED таблица к первой записи. Чтобы решить вашу проблему, просто соедините и назначьте значения, необходимые в UPDATE заявление непосредственно от INSERTED и это сработает. Сделайте что-нибудь вроде этого:

UPDATE a
   SET a.[Field1] = b.[Field1]
     , a.[Field2] = b.[Field2]
     , ...
  FROM [dbo].[TblDailyAttandence] a
   INNER JOIN inserted b ON b.[Empcode] = a.[empcode] AND b.[Monthyear] = a.[MonthYear]