Если я правильно понимаю, вы хотите выполнить ОБНОВЛЕНИЯ без указания необходимой логики WHERE, чтобы избежать создания дубликатов?
create table #t (col1 int not null, col2 int not null, primary key (col1, col2))
insert into #t
select 1, 1 union all
select 1, 2 union all
select 2, 3
-- you want to do just this...
update #t set col2 = 1
-- ... but you really need to do this
update #t set col2 = 1
where not exists (
select * from #t t2
where #t.col1 = t2.col1 and col2 = 1
)
Основные варианты, которые приходят на ум:
- Используйте полный оператор UPDATE, чтобы избежать создания дубликатов
- Используйте триггер INSTEAD OF UPDATE, чтобы «перехватить» UPDATE, и выполняйте только те ОБНОВЛЕНИЯ, которые не создадут дубликат
- Используйте строковую технику обработки, такую как курсоры, и переносите каждое ОБНОВЛЕНИЕ в TRY ... CATCH ... или любой другой эквивалент языка
Я не думаю, что кто-то может сказать вам, какой из них лучше, потому что это зависит от того, что вы пытаетесь сделать, и в какой среде вы работаете. Но потому что построчная обработка потенциально может привести к некоторому ложному Я бы хотел придерживаться подхода, основанного на множествах.