使用 Visual Studio 数据库项目中的数据将外键约束添加到现有表
Posted
技术标签:
【中文标题】使用 Visual Studio 数据库项目中的数据将外键约束添加到现有表【英文标题】:Add foreign key constraint to existing table with data in a Visual Studio database project 【发布时间】:2015-03-12 15:56:25 【问题描述】:我有一个 Visual Studio 数据库项目,我需要向指向该新表的现有表/列添加一个新表和一个外键。我们已经有了数据,我不想丢失它。
我有一个独立的表(名为 Records),其中一个字段是 statusID。这映射到我们代码中的枚举,因此在直接查询数据库时它提供的价值很小。
我创建了一个名为 AllStatuses 的新表。主键是 statusID,值与我的枚举相同。它还具有文本值(与我的枚举匹配)和其他一些属性。
接下来,我将外键约束添加到引用我的新 AllStatues 表的 Records 表中。
在部署期间会创建新表。然后在创建 FK 时抛出错误,因为 AllStatues 还没有数据。
我在部署后向 AllStatues 添加数据,但为时已晚。 我无法在预部署中添加它,因为该表不存在。
我正在尝试找到一种适当的方法来处理这个问题。 我可以通过将 Records 表数据移动到临时表并在 preDeployment 脚本中截断来解决问题。添加数据后,然后将数据移回 postDeployment 中。我不喜欢这样,因为每次部署都会发生这种情况——在需要它很久之后。
【问题讨论】:
【参考方案1】:在创建外键时,您可以创建“WITH NOCHECK”。这将在创建外键时防止违规。在您的部署后插入值。然后最后一步是使用“WITH CHECK CHECK CONSTRAINT”强制执行约束。我使用 SSDT 的数据库项目将此作为发布过程的一部分。
【讨论】:
以上是关于使用 Visual Studio 数据库项目中的数据将外键约束添加到现有表的主要内容,如果未能解决你的问题,请参考以下文章
使用 Visual Studio 数据库项目中的数据将外键约束添加到现有表
使用 Visual Studio 数据库项目中的数据将外键约束添加到现有表
visual studio 2010中调用另外一个项目中的方法
Visual Studio数据库版中的“数据库项目”和“服务器项目”之间有什么区别?