SQL Server 2008.
У меня есть несколько частей кода, работающих вместе, и эффект довольно странный, поэтому я решил поделиться.
У меня есть таблица с электронными письмами - для простоты предположим, что есть 2 столбца: идентификатор идентификатора (1,1) int первичный ключ адрес электронной почты varchar (900)
Также в столбце электронной почты есть уникальный ключ с IGNORE_DUP_KEY = ON.
С другой стороны проблемы есть оператор слияния:
merge into dbo.email
using (
select distinct email t from #t
) p
ON t = email
when not matched by target then
insert (email) values (t);
Стоит отметить, что #t в основном (для целей этого запроса) представляет собой таблицу с одним столбцом и электронной почтой varchar(500).
Что удивительно, так это то, что запрос не удался:
«Нарушение ограничения UNIQUE KEY« uq_email ». Невозможно вставить дубликат ключа в объект dbo.email»
Однако это работает безупречно:
insert into dbo.email (email) select email from #t
Хотя я, очевидно, могу обойти эту проблему (инструкция вставки в любом случае быстрее, так что это путь), я понятия не имею, почему инструкция MERGE не удалась. Любые идеи, кто-нибудь?
РЕДАКТИРОВАТЬ: Полный вариант использования: Шаг 1:
create table #temp (
col1 varchar(500),
col2 varchar(500),
col3 varchar(500),
col4 varchar(500),
col5 varchar(500),
email varchar(500),
id int)
Шаг 2:
#temp заполняется из файла CSV для многих целей.
Шаг 3:
слияние с dbo.email с помощью (выберите отдельный адрес электронной почты t из #temp) p ON t = адрес электронной почты, если он не соответствует цели, затем вставьте (адрес электронной почты) значения (t);
Шаг 0 — СОЗДАЙТЕ скрипт для dbo.email:
CREATE TABLE dbo.email (
id int identity(1,1) not null,
email varchar(900) null,
loaddate date default null,
constraint [PK__email__1111] PRIMARY KEY CLUSTERED
(
id asc
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY,
CONSTRAINT [uq_email] UNIQUE NONCLUSTERED
(
EMAIL asc
)
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = ON, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY
) ON PRIMARY
Я не могу сделать намного больше, не предоставив вам сотни гигабайт данных, о чем, очевидно, не может быть и речи.