有没有办法抑制通过在 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;
这类似于运行脚本 SQL Server 2005 时如何抑制 T-SQL 警告?,但在这种情况下,那里的解决方案不起作用。我还看到了使用 TRY...CATCH 的建议,但这也不起作用:看来您无法捕获警告。
我正在使用 SQL Server 2005。