Самое гибкое решение - создать пакет SSIS, который использует компонент сценария в качестве источника данных.
Вы можете прочитать файл по одной строке за раз и применить определенное логическое определение для каждого столбца, который вы хотите для отправки в поток данных.
Вы должны действительно использовать ограничение. Триггер «после вставки» фактически помещает вторую строку в таблице. , , и, надеюсь, никто не использует NOLOCK
для чтения.
В любом случае, вам нужно посчитать строки и найти несколько вхождений. Это будет примерно так:
Create trigger tr_Duplicate on Utentes after INSERT as
begin
if exists (select 1
from utentes u join
inserted i
on u.nic = i.nic
group by u.nic
having count(*) > 1
)
begin
print 'NIC already in database';
rollback;
end;
end;
С триггером instead of
вы не добавите новые строки в таблицу, если она уже существует:
create trigger tr_Duplicate on Utentes after INSERT as
begin
if exists (select 1
from utentes u join
inserted i
on u.nic = i.nic
)
begin
print 'NIC already in database';
rollback;
end;
else
begin
insert into utentes
select i.*
from inserted i;
end;
end;
Я бы поддержал мнение против использования триггеров, а также предложил бы использовать УНИКАЛЬНЫЕ ограничения. По моему скромному мнению, я бы предпочел искать решение на уровне ETL, группируя записи по мере их вставки. С помощью триггеров вы получите вышеупомянутые проблемы параллелизма и непротиворечивости, а также потенциальное увеличение базы данных tempdb или T-log, если таблица когда-либо станет достаточно большой, чтобы обработать ее некоторое время.