Есть ли способ подавить предупреждения, созданные путем вставки повторяющихся ключей в индексы с IGNORE_DUP_KEY = ON? Предупреждение, которое оно дает, - «Дублирующий ключ был проигнорирован».Запретить предупреждения T-SQL, созданные IGNORE_DUP_KEY
Я изучаю эту опцию с переменной таблицы по соображениям производительности, но она генерирует много предупреждающих сообщений. Это может быть проблемой, так как я записываю вывод моего сценария в текстовый файл, и я не хочу, чтобы файл журнала заполнял сотни строк этого предупреждения снова и снова.
Предупреждения могут быть воспроизведены со следующим сценарием. Примечание. Это не мой фактический сценарий, а просто пример для иллюстрации.
SET NOCOUNT ON;
SET ANSI_WARNINGS OFF;
DECLARE @data TABLE (x int NOT NULL PRIMARY KEY);
DECLARE @i int;
SET @i = 1;
WHILE @i <= 1000
BEGIN
INSERT INTO @data (x) VALUES (@i);
SET @i = @i + 1;
END;
DECLARE @test TABLE (x int NOT NULL PRIMARY KEY WITH (IGNORE_DUP_KEY = ON));
SET @i = 2;
WHILE @i <= 1000
BEGIN
INSERT INTO @test (x) SELECT x FROM @data WHERE (x % @i) = 0 AND x > @i
SET @i = (SELECT MIN(x) FROM @data d WHERE x > @i
AND NOT EXISTS (SELECT 1 FROM @test t WHERE t.x=d.x));
END;
SELECT COUNT(*) FROM @test;
Это похоже на How do I suppress T-SQL warnings when running a script SQL Server 2005?, но решение там не работает в этом случае. Я также видел предложения по использованию TRY ... CATCH, но это тоже не работает: похоже, вы не можете поймать предупреждения.
Я использую SQL Server 2005.
Это не имеет такого же поведения. Без IGNORE_DUP_KEY одна ошибка приводит к сбою всей транзакции. Так, например, если я пытаюсь вставить 4, 13 и 57, если 4 уже находится в таблице, то ни 13, ни 57 не будут вставлены. При включении IGNORE_DUP_KEY будут вставлены как 13, так и 57, но 4 раза не будут вставлены во второй раз. – Tadmas