SSDT Schema Compare 总是添加对象,在解决方案中为“Build = None”

Est*_* P. 9 sql-server compare visual-studio

在我的 Visual Studio 数据库解决方案中,我有一些对象Build action = None,由于多种原因(由OPENQUERY...引起的构建问题),我必须设置这些对象。

不幸的是,模式比较不会比较这些元素。每当我进行比较“源 = 开发数据库”和“目标 = 解决方案”时,它们都会被标记为新的,并且模式比较会建议添加这些对象。

如果我添加这些对象,更新将识别出它们已经在解决方案中,并将添加具有新名称[objectname]+_1和的元素Build action = Build,这当然会在下一次构建期间导致问题。

有谁知道是否有解决这个问题的简单方法?除了使用Pre-buildPost-Build命令行之外,在构建之前禁用对象并在再次构建后启用它们。

提前致谢

Seb*_*THU 0

评论中要求的最小可重现示例:

SebTHU:添加最小的可重现示例。

创建一个新的空沙箱数据库。在数据库中,运行以下脚本:

创建表 Table1(PersonID INT NOT NULL,FullNam nvarchar(255) NOT NULL) 去创建表 Table1_New (PersonID INT NOT NULL,FullName nvarchar(255) NOT NULL) 去创建视图 vwOriginalView AS SELECT PersonID,FullNam FROM Table1 去 EXEC sp_rename ' Table1','ZZZTable1','OBJECT' GO EXEC sp_rename 'Table1_New','Table1','OBJECT' GO CREATE VIEW vwNewView AS SELECT PersonID,FullName FROM Table1 GO

这模拟了 Table1 上的有效 ALTER TABLE,但原始表被保留为重命名的已弃用对象。vwOriginalView 现在有一个无效的引用,但我们也想保留它(暂时);它将被重命名,但这没有必要证明这个问题。

在 VS 中,创建一个新的数据库项目。针对沙箱数据库运行架构比较。按“更新”将 4 个对象的脚本添加到项目中。保持比较窗口打开。现在存在构建错误(vwOriginalView 对 Fullnam 列的引用无效)。要忽略此对象,请将其 BuildAction 设置为 None。错误消失。再次按比较窗口上的“比较”。vwOriginalView 现在在数据库中显示为“新”对象,将添加到项目中。这就是问题。值得提醒的是,如果项目中确实存在该对象,则该对象的 BuildAction 将设置为 None。但对于许多(20-30)个此类对象,SchemaCompare 变得令人困惑。

我需要的是 Compare 将“BuildAction=None”对象视为项目中现有对象的一种方法 - 理想情况下可以作为选项进行切换,以便在需要时可以使这些对象在 Compare 中清晰可见;或者 或者一种使不推荐使用的对象(特别是我选择的对象)不会导致构建错误的方法 - “BuildAction=None”的替代方法。

我已经在 VS 中尝试过 SQL 错误抑制,但一方面它不起作用,另一方面全局抑制此类错误将是一个坏主意。