2011-04-04 17 views
0

我正在使用SQL Server 2008.插入,回滾先前插入的數據時會出現異常嗎?

我有一個INSERT語句,它從一個表插入大量記錄到另一個表。 插入時,我得到了一個主鍵異常。

我的問題是...如果在插入第5行時發生異常...所有四個記錄(之前插入的)是否會回滾?

在此先感謝。

回答

5

是的。除非您在索引上啓用了IGNORE_DUP_KEY選項,否則它將回滾該語句中插入的所有行

create table t1 
(
col int NOT NULL PRIMARY KEY WITH (IGNORE_DUP_KEY=ON) 
) 

create table t2 
(
col int NOT NULL PRIMARY KEY WITH (IGNORE_DUP_KEY=OFF) 
) 

INSERT INTO t1 values (1),(1) 

INSERT INTO t2 values (1),(1) 

SELECT * FROM t1 /*Returns 1 row*/ 

SELECT * FROM t2 /*Returns 0 rows*/ 
+0

另一個鏈接引用此SQLServer的特徵:即設置IGNORE_DUP_KEY = ON [創建索引(TSQL)](http://msdn.microsoft.com/en-us/library/ms188783.aspx)。 – hardmath 2011-04-04 14:59:07

+0

你的意思是...右鍵單擊Index ..goto屬性 - >選項 - >「忽略重複值」複選框?對我來說,這是沒有檢查的。 – Relativity 2011-04-04 15:02:06

+0

@Anish - 如果未選中,那麼'IGNORE_DUP_KEY'關閉,所有行都會回滾。 – 2011-04-04 15:06:45