2017-01-27 13 views
1

Вот сценарий.Массовое обновление в SQL

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

Update ep 
    Set ep.AddressEMail = mail 
FROM SampleTable Samp 
    Inner Join Emp ec 
On ec.EecEmpNo = Samp.employeeid 
    Inner Join Emp ep 
on ep.EEID = ec.EecEEID 
    Where ep.AddressEMail <> mail 

Я бы назвал следующий SP для каждого обновления, которое происходит.

EXEC dbo.AddQuickEvent 

Должен ли я изменить мой выше SQL Переберите каждую запись и выполнения SP (EXEC dbo.AddQuickEvent), что требуется, или есть какой-либо другой способ, чтобы выполнить другую хранимую процедуру, когда есть обновление к строке.

ответ

2

Обновление - это операция, основанная на наборе, поэтому лучше всего не перебирать записи и вызывать SP для каждой записи, поскольку это было бы ужасно неэффективно.

Лучшим вариантом может быть сделать то, что вы пытаетесь сделать в «AddQuickEvent», в триггере на столе и работать с набором обновленных записей.

При работе в SQL почти всегда лучше думать в терминах заданных операций, а не циклически и обрабатывать каждую запись отдельно.

+0

Большое спасибо за ваше ценное предложение. Если меня не интересует performace, можно ли перебирать курсор через курсор? – Naga

+0

Что вы пытаетесь сделать в AddQuickEvent? Цикл - это всегда вариант, почти всегда не самый лучший. – MikeS

+0

В этой процедуре не так много всего, но я всегда мог скопировать один и тот же код в триггер. – Naga