Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 主键约束冲突,仅当通过vsdbcmd部署DB时_Visual Studio 2010_Sql Server 2008_Vsdbcmd - Fatal编程技术网

Visual studio 2010 主键约束冲突,仅当通过vsdbcmd部署DB时

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

我正在使用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属性以设置我选择的值。我的部署后脚本中的相关行如下所示:

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约束而失败

典型的用户错误