【问题标题】:IDENTITY_INSERT and SQL Server CompactIDENTITY_INSERT 和 SQL Server Compact
【发布时间】:2015-08-20 23:57:48
【问题描述】:

下面的脚本创建一个表,暂时关闭自动标识,在指定 PK 值的同时插入记录,然后重新启用自动标识。

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]

这是出乎意料的。我做错了什么?

【问题讨论】:

  • 不要对 Compact 感到太自在; it has been deprecated and there are better options.
  • @AaronBertrand 我们仍在使用它,并将继续使用它,因为它非常方便。 db 只是一个文件,我可以复制它。我确信 MS 会以某种方式重新启动支持,因为他们的平台没有进程内/单文件数据库引擎是没有意义的。如果它在某个时候完全死掉了,我们就转移到 SQLite。

标签: sql sql-server sql-server-ce sql-server-ce-4


【解决方案1】:

你需要像这样重置种子

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

【讨论】:

  • 在您的 CE 工具箱应用程序中尝试过这个 - 非常棒! - 它有效。谢谢。
  • 欢迎您 - 如果您喜欢我的工具,我会非常高兴在这里进行评论:visualstudiogallery.msdn.microsoft.com/…
  • 审核已提交! :-)
  • 谢谢,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多