2
有沒有辦法通過在IGNORE_DUP_KEY = ON的索引中插入重複鍵來生成警告?它給出的警告是「重複密鑰被忽略。」抑制由IGNORE_DUP_KEY生成的T-SQL警告
由於性能原因,我正在調查使用此選項和表變量,但它會生成很多警告消息。這可能是一個問題,因爲我將腳本的輸出記錄到文本文件中,而且我不希望日誌文件一遍又一遍地填滿數百行此警告。
警告可以通過以下腳本進行復制。注意:這不是我的實際腳本,而僅僅是用於說明的一個例子。
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 2010-01-10 00:52:47