gpt4 book ai didi

sql - TFS - 数据库部署 - 在约束上设置 CHECK 或 NOCHECK

转载 作者:行者123 更新时间:2023-12-01 15:14:33 25 4
gpt4 key购买 nike

我们目前使用的是 Visual Studio 2010,并且有一个包含我们所有数据库对象的数据库项目。我们通常通过构建脚本将数据库部署到我们的 CI、QA 和 UAT 环境。对于生产,我们生成脚本并将其提供给我们的 DBA 进行部署。

我们注意到我们的生产数据库的部署想要删除大量外键约束并使用 NOCHECK 重新创建它们。

当我们创建外键时,我们没有定义CHECKNOCHECK。下面是我们其中一个键的示例:

ALTER TABLE [dbo].[Table1]
ADD CONSTRAINT [FK_Table1_Table2_Field1]
FOREIGN KEY ([Field1])
REFERENCES dbo.[Table2] ([Field1])

当我们将我们的数据库项目定位到我们的 CI、QA 和 UAT 环境时,它想要使用“CHECK”创建约束。它采用上述脚本并尝试部署:

ALTER TABLE [dbo].[Table1] WITH CHECK
ADD CONSTRAINT [FK_Table1_Table2_Field1]
FOREIGN KEY ([Field1])
REFERENCES dbo.[Table2] ([Field1])

当我们将数据库项目定位到我们的生产环境时,它想要使用“NOCHECK”创建约束。它采用上述脚本并尝试部署:

ALTER TABLE [dbo].[Table1] WITH NOCHECK
ADD CONSTRAINT [FK_Table1_Table2_Field1]
FOREIGN KEY ([Field1])
REFERENCES dbo.[Table2] ([Field1])

我的数据库项目中是否存在导致此问题的设置?由于我们没有在脚本中提供默认设置,数据库中是否有设置?

最佳答案

这个问题的答案应该对你有所帮助: WITH CHECK ADD CONSTRAINT followed by CHECK CONSTRAINT vs. ADD CONSTRAINT

看起来“WITH CHECK”是新外键的默认值,“WITH NOCHECK”是重新启用外键的默认值。如果您每次都为 CI、QA 和 UAT 创建一个新数据库并且只更改您的生产数据库(通常的做法),这将是有意义的。

关于sql - TFS - 数据库部署 - 在约束上设置 CHECK 或 NOCHECK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7114190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com