Есть ли способ подавления предупреждений, генерируемых путем вставки повторяющихся ключей в индексы с IGNORE_DUP_KEY = ON? Это предупреждение «Дубликат ключа был проигнорирован».
Я исследую использование этой опции с табличной переменной для повышения производительности, но она генерирует много предупреждающих сообщений. Это может быть проблемой, так как я записываю вывод моего скрипта в текстовый файл, и я не хочу, чтобы файл журнала снова и снова заполнялся сотнями строк этого предупреждения.
Предупреждения могут быть воспроизведены с помощью следующего сценария. Примечание: это не мой настоящий сценарий, а просто пример для иллюстрации.
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;
Это похоже на Как подавить предупреждения T-SQL при запуске сценария SQL Server 2005? , но решение в этом случае не работает. Я также видел предложения по использованию TRY ... CATCH, но это тоже не работает: похоже, вы не можете перехватить предупреждения.
Я использую SQL Server 2005.