gpt4 book ai didi

sql-server - 生成的脚本中的 SQL Server Check/NoCheck 差异

转载 作者:行者123 更新时间:2023-12-03 01:46:52 25 4
gpt4 key购买 nike

我正在尝试同步不同数据库之间的架构。基本上,我在两个数据库上运行了任务 -> 使用 SQL Server Management Studio (2005) 生成脚本,并使用 diff 工具比较输出。

出于某种原因,一个脚本添加了约束 WITH CHECK 和一个 WITH NO CHECK,然后重新启用了这两个约束。

我得到的第一个数据库:

ALTER TABLE [dbo].[Profile]  WITH CHECK ADD  CONSTRAINT [FK_Profile_OrganizationID] FOREIGN KEY([OrganizationID])
REFERENCES [dbo].[Organization] ([OrganizationID])
GO
ALTER TABLE [dbo].[Profile] CHECK CONSTRAINT [FK_Profile_OrganizationID]
GO

第二个数据库生成为

ALTER TABLE [dbo].[Profile]  WITH NOCHECK ADD  CONSTRAINT [FK_Profile_OrganizationID] FOREIGN KEY([OrganizationID])
REFERENCES [dbo].[Organization] ([OrganizationID])
GO
ALTER TABLE [dbo].[Profile] CHECK CONSTRAINT [FK_Profile_OrganizationID]
GO

所以我有两个问题:

  1. 最终的结果是一样的吗?(编辑:似乎很多人只注意到两个脚本的第一条语句。我对两个脚本的最终结果都很感兴趣。)

  2. 如果最终结果相同,为什么 Management Studio 针对不同的数据库生成不同的结果?

最佳答案

最终的结果不一样!

SQL Server 不会信任 FK 的唯一性,因为它未经检查。这意味着如果您在查询中使用该列,则需要进行额外的处理。
长话短说,您应该让 SQL Server 检查该列,以便将其视为可信的。

至于为什么它们与不同的服务器不同,请检查sys.foreign_keys中的isnottrusted列。这可能会影响 SSMS 生成的内容?

有关此问题的更多咆哮,请查看 my other answer与 FK 和 NO CHECK/CHECK 选项相关。

关于sql-server - 生成的脚本中的 SQL Server Check/NoCheck 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1337980/

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