我正在使用 VS 2010 Premium RTMRel (10.0.30319.1) 和 SS2008。我有一个构建 AOK 的数据库,并有一个加载一些示例数据的部署后脚本。当我通过 VS UI 构建和部署这个数据库时,它工作得很好。当我尝试通过 vsdbcmd 部署它时,它在数据填充上失败,并出现如下错误:
** * SQL01268 C:\source\mydatabase.sql (5197,0) .Net SqlClient 数据提供者:消息 2627,级别 14,状态 1,第 227 行违反主键约束“pk_customers”。无法在对象“dbo.customers”中插入重复键。* *
出于演示目的,我试图将特定记录填充到客户表中,并覆盖 id 列的 IDENTITY 属性以设置我选择的值。我的部署后脚本中的相关行如下:
SET IDENTITY_INSERT [dbo].[customers] ON
INSERT INTO [dbo].[customers] ([id], [name], [notes]) VALUES ( 10001, N'ABC Co', NULL )
SET IDENTITY_INSERT [dbo].[customers] OFF
有谁知道为什么我可以通过 UI 而不是通过命令行覆盖 IDENTITY 列(通过使用 SET IDENTITY INSERT ON)?
不,客户表中不可能已经存在 id = 10001 的记录。表中根本没有其他记录(或插入)。
我相信错误消息的“对象中的重复键”部分是完全错误的,并且它反对我试图将我自己的值放入 PK 列。
PK 约束具有标准默认值。如果我更改默认值并设置 IGNORE_DUP_KEY = ON,则命令行部署有效。但我不想这样做。
任何见解或建议表示赞赏。