Visual studio 2010 主键约束冲突,仅当通过vsdbcmd部署DB时
我正在使用VS2010高级RTMRel(10.0.30319.1)和SS2008。我有一个构建AOK的数据库,还有一个加载一些示例数据的部署后脚本。当我通过VSUI构建和部署这个DB时,它工作得很好。当我尝试通过vsdbcmd部署它时,它在数据填充上失败,错误如下: ***SQL01268 C:\source\mydatabase.sql(5197,0).Net SqlClient数据提供程序:Msg 2627,第14级,状态1,第227行违反主键约束“pk_客户”。无法在对象“dbo.customers”中插入重复密钥。*** 出于演示目的,我尝试将特定记录填充到customers表中,并重写id列的IDENTITY属性以设置我选择的值。我的部署后脚本中的相关行如下所示:Visual studio 2010 主键约束冲突,仅当通过vsdbcmd部署DB时,visual-studio-2010,sql-server-2008,vsdbcmd,Visual Studio 2010,Sql Server 2008,Vsdbcmd,我正在使用VS2010高级RTMRel(10.0.30319.1)和SS2008。我有一个构建AOK的数据库,还有一个加载一些示例数据的部署后脚本。当我通过VSUI构建和部署这个DB时,它工作得很好。当我尝试通过vsdbcmd部署它时,它在数据填充上失败,错误如下: ***SQL01268 C:\source\mydatabase.sql(5197,0).Net SqlClient数据提供程序:Msg 2627,第14级,状态1,第227行违反主键约束“pk_客户”。无法在对象“dbo.cust
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而不是命令行覆盖标识列(通过使用SET IDENTITY INSERT ON)
不,在customers表中不可能已经存在id=10001的记录。表中根本没有其他记录(或插入)
我认为错误消息中的“复制对象中的密钥”部分完全是错误的,它反对我将自己的值放入PK列
PK约束具有标准默认值。如果更改默认值并将IGNORE\u DUP\u KEY=ON设置为ON,那么命令行部署就可以工作。但我不想这么做
任何见解或建议都将不胜感激。好的,不好意思
事实证明,我的部署后脚本有一个USE语句,该语句指定了默认的DB名称(称为MobileDB)。当我通过UI进行构建时,我也使用了这个MobileDB名称,部署配置总是在重新创建数据库,所以一切正常
然而,当我从vsdbcmd部署时,我使用了一个随机的DB名称(比如ChickenSoup)。因此,当数据填充脚本运行时,它试图写回MobileDB,命中已经存在的数据,并且由于违反PK约束而失败
典型的用户错误