2015-08-20 143 views
1

下面的腳本創建一個表,暫時關閉自動標識,在指定PK值時插入記錄,然後重新啓用自動標識。IDENTITY_INSERT和SQL Server Compact

DROP TABLE Foo; 
GO 

CREATE TABLE Foo (Id int IDENTITY (1,1) NOT NULL, 
        Bar nvarchar(100) NOT NULL); 
GO 

ALTER TABLE Foo ADD CONSTRAINT FooConstraint PRIMARY KEY (Id); 
GO 

SET IDENTITY_INSERT Foo ON; 
GO 

INSERT INTO Foo(Id, Bar) VALUES (1, 'a'); 
GO 
INSERT INTO Foo(Id, Bar) VALUES (2, 'b'); 
GO 
INSERT INTO Foo(Id, Bar) VALUES (3, 'c'); 
GO 

SET IDENTITY_INSERT Foo OFF; 
GO 

INSERT INTO Foo(Bar) VALUES ('d'); 
GO 

問題是,最後插入 - 它抱怨說,

重複的值不能插入唯一索引。 [表名= Foo,約束名= FooConstraint]

這是意想不到的。我究竟做錯了什麼?

+0

種子不要用過於緊湊舒適; [它已被棄用,並有更好的選擇](http://stackoverflow.com/a/20364011/61305)。 –

+1

@AaronBertrand我們仍然使用它,並會繼續這樣做,因爲它非常方便。數據庫只是一個文件,我可以複製它。我相信MS會以某種方式重新啓動支持,因爲沒有爲他們的平臺提供進程內/單一文件數據庫引擎是沒有意義的。如果它在某個時候完全死亡,我們將轉移到SQLite。 –

回答

1

您需要重置這樣

ALTER TABLE [Foo] ALTER COLUMN [Id] IDENTITY (4, 1) 
+0

在您的CE工具箱應用程序中嘗試了這一點 - 這非常棒! - 它的工作原理。謝謝。 –

+1

不客氣 - 如果你喜歡我的工具,我會非常感激這裏的評論:https://visualstudiogallery.msdn.microsoft.com/0e313dfd-be80-4afb-b5e9-6e74d369f7a1/view/Reviews – ErikEJ

+0

評論提交! :-) –