【问题标题】:Visual Studio 2013 Schema Compare/Publish ignores column order in definition of foreign key constraintVisual Studio 2013 架构比较/发布忽略外键约束定义中的列顺序
【发布时间】:2014-06-19 21:58:38
【问题描述】:

Visual Studio 架构比较和数据库发布工具未检测到定义外键的列顺序的差异。

假设源数据库/数据库项目上存在以下外键约束:

ALTER TABLE dbo.ReferencingTable
ADD CONSTRAINT FK_1
FOREIGN KEY (Column1, Column2)
REFERENCES dbo.ReferencedTable (Column1, Column2)

假设目标数据库/数据库项目完全相同,除了外键 FK_1,列以不同的顺序定义(注意 Column2 现在指向 dbo.ReferencedTable.Column1,Column 1 指向 dbo.ReferencedTable .Column2) 像这样:

ALTER TABLE dbo.ReferencingTable
ADD CONSTRAINT FK_1
FOREIGN KEY (Column2, Column1)
REFERENCES dbo.ReferencedTable (Column1, Column2)

注意:假设列是类型兼容的(例如所有 INT)

我希望 VS 能够检测到这种差异并生成正确的脚本来更新目标架构(即目标外键)。

找不到控制此行为的设置/选项。这是一个错误吗?

【问题讨论】:

  • 曾经有一个“忽略列顺序”选项,但在 VS 2012/2013 中已删除。此选项适用于表定义中的列顺序,但我不确定它是否也适用于外键约束。
  • 基思,感谢您的回复。是的,我知道这样的选择。它适用于表中的列顺序并有助于避免表重建。在我看来,这个选择是有道理的。但是,考虑到这一点,我不明白为键启用/禁用此行为的选项首先是如何有意义的。键(及其列顺序隐含的列映射)必须按照定义进行解释,这不是一个选项。禁用此行为将违反关系原则。
  • 我只是尝试在 SSDT 2012 中切换 FK 关系列的顺序。如果列与父表。所以 Column1,Column2 仅在父表中 PK 列的顺序时才有效。
  • 彼得,感谢您的尝试。但是,请注意列名是无关紧要的,只要它们是类型兼容的。如果 Column1 和 Column2 属于同一类型(例如 INT),它肯定会让您根据需要定义 FK。
  • 知道了 - 刚刚使用 SSDT 2012 进行了测试并得到了相同的行为。对我来说听起来像是一个错误,因为如果你第一次出错,那么在推送代码时会产生相当大的差异。可以在部署后修复,但很难看,您需要知道存在问题。

标签: sql sql-server visual-studio-2013 database-schema database-project


【解决方案1】:

是的,问题是 SQL Server Data Tools (SSDT) 的错误。 Microsoft 将在 VS2012、VS2013 和下一个 Visual Studio 版本的 RTM 上的下一次 SSDT 更新中包含该修复程序。更多信息见链接:

Visual Studio 2013/SQL Server Data Tools: Schema Compare/Publish ignores column order in definition of foreign key constraint

【讨论】:

  • 我已确认此错误已在 SSDT 12.0.50318.0 上修复
猜你喜欢
  • 2014-02-21
  • 2012-09-22
  • 2020-07-21
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 2017-11-30
相关资源
最近更新 更多