首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主键约束冲突,仅当通过vsdbcmd部署DB时

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

Stack Overflow用户
提问于 2011-02-01 14:46:59
回答 1查看 1.3K关注 0票数 2

我使用VS 2010高级RTMRel (10.0.30319.1)和SS2008。我有一个数据库,它构建AOK,并有一个后部署脚本,它加载一些示例数据。当我通过VS UI构建和部署这个DB时,它工作得很好。当我试图通过vsdbcmd部署它时,它会在数据填充上失败,错误如下:

** * SQL01268 C:\source\mydatabase.sql (5197,0) .Net SqlClient数据提供程序: Msg 2627,14级,State 1,第227行违反主键约束'pk_customers‘。无法在对象'dbo.customers'.**中插入重复密钥

为了演示的目的,我试图将一条特定的记录填充到customers表中,并覆盖id列的IDENTITY属性,以设置我选择的值。部署后脚本中的相关行如下:

代码语言:javascript
复制
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列(通过使用)吗?

不,不可能已经有id = 10001的customers表中的记录。表中根本没有其他记录(或插入)。

我认为错误消息中的“复制键”部分是完全错误的,它反对我将自己的值放入PK列中。

PK约束具有标准的默认值。如果更改默认值并设置IGNORE_DUP_KEY = ON,则命令行deploy工作。但我不想那么做。

任何见解或建议都值得赞赏。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-01 20:58:48

好吧,很丢人。

结果发现,我的部署后脚本有一个USE语句,用于指定默认的DB名称(称为MobileDB)。当我通过UI构建时,我也使用了这个MobileDB名称,部署配置总是重新创建数据库,所以一切都很好。

但是,当我从vsdbcmd部署时,我使用的是一个随机的DB名称(比如ChickenSoup)。因此,当数据填充脚本运行时,它试图写回MobileDB,击中已经存在的数据,并违反PK约束而失败。

典型的用户错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4863958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档