使用 Visual Studio 数据库项目中的数据将外键约束添加到现有表
Posted
技术标签:
【中文标题】使用 Visual Studio 数据库项目中的数据将外键约束添加到现有表【英文标题】:Add foreign key constraint to existing table with data in a Visual Studio database project 【发布时间】:2015-03-11 18:46:13 【问题描述】:我有一个针对 SQL Server 2014 数据库的 Visual Studio 数据库项目。我需要为现有的父表创建一个子表。父级已经有外键列,我需要将约束添加到新的父表中(FK 在子级上并指向父级)。我想保留数据。
目前,部署过程会创建新表和外键。部署后脚本将子记录添加到新的子表中。
我的问题是FK失败,因为没有添加子记录。 我无法在预部署中添加子记录,因为此时该表不存在。
我无法在预部署中禁用约束,因为它是在部署中创建的。
这似乎很常见。是否有既定的方法可以做到这一点?
【问题讨论】:
需要澄清一下。I need to add the constraint to the new parent table
你的意思是新的 child 表? the FK fails because the child records have not been added
这不应该发生,除非您将约束放在看起来倒退的父表上。
你是对的。我更新了问题。
您可以通过将 FK 约束放在子表中来避免这个问题(以及许多其他问题)。父表不应引用子表,否则您会创建“先有鸡还是先有蛋”的情况。
我有一张桌子,我称之为孩子。它有一个 statusID 列。我们里面有数据。后来,我们创建了一个表,其中包含我称之为父级的允许雕像。现在child中的statusID列需要和FK约束指向新的status父表。我似乎无法在数据库项目中进行此设置,因此它将在不丢失数据的情况下进行部署。
【参考方案1】:
这应该不是问题。默认情况下,数据库项目使用 NoCheck 选项创建约束——这意味着 SQL Server 不会验证数据。然后,在 postDeploy 之后它将检查约束。看看你的部署脚本,它会验证这一点。
【讨论】:
以上是关于使用 Visual Studio 数据库项目中的数据将外键约束添加到现有表的主要内容,如果未能解决你的问题,请参考以下文章
使用 Visual Studio 数据库项目中的数据将外键约束添加到现有表
使用 Visual Studio 数据库项目中的数据将外键约束添加到现有表
visual studio 2010中调用另外一个项目中的方法
Visual Studio数据库版中的“数据库项目”和“服务器项目”之间有什么区别?