【发布时间】:2014-06-21 06:45:19
【问题描述】:
我为 SQL Server 2012 数据库创建了一个 SSDT 项目。因为我的数据库已经存在于 SQL Server 数据库引擎中,所以我使用导入功能将所有对象导入 SSDT。一切正常,但我现在面临 2 个问题
1) 因为其中一个表使用 HIERARCHYID 列 (col1) 作为数据类型,并且有一个基于 HIERARCHYID 列的计算列。计算列的定义类似于 case Col1= hierarchy.GETRoot() THE NULL ELSE someexpression END。在 SSDT 中导入表脚本后,开始出现未解析引用的错误。 如果我将定义更改为 case hierarchy.GETRoot() = Col1 THE NULL ELSE someexpression END(注意现在 col1 现在位于末尾),它可以正常工作。
2) 如果我保留上述解决方案(即在 = 之后保留 col1),那么在发布项目时,SSDT 必须在生产服务器上删除该列,然后重新创建它。由于有一个索引依赖于该列,因此部署失败每次都说像 ALTER TABLE DROP COLUMN 这样的错误失败,因为其他对象访问它。我无法控制 SSDT 如何设计/发布脚本。如果我在发布数据库项目之前必须注意删除每个依赖对象,那么我认为没有用它
请建议我如何解决这个问题
谢谢 阿图尔
【问题讨论】:
-
我遇到了这个确切的问题。我有一个计算列,它上面有一个索引。当 dacpac 部署尝试删除并重新创建索引时,该索引被忽略,部署随后失败。我预计现在必须删除并重新创建索引前后部署脚本,但是一个有效的解决方案将优于解决方法。在这个问题上运气好吗?
-
确认是我们使用的SSDT版本的问题;请参阅下面的答案。
-
我的回答最终变成了不回答。我对其进行了编辑,并在用户语音上发布了该错误,因为它仍然存在于 SSDT 的当前版本中。正如我在回答中提到的,目前的解决方法是针对每个场景的部署前和部署后脚本。
标签: sql sql-server deployment sql-server-data-tools