Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2012 项目不进行列重命名,而是进行列删除和列添加_Sql Server 2012_Sql Server Data Tools - Fatal编程技术网

Sql server 2012 项目不进行列重命名,而是进行列删除和列添加

Sql server 2012 项目不进行列重命名,而是进行列删除和列添加,sql-server-2012,sql-server-data-tools,Sql Server 2012,Sql Server Data Tools,我使用SSDT来保持两个数据库的同步 为此,我在Server1中有一个数据库,在Server2中有一个数据库,在我的项目中有一个模式 我总是在Server1数据库中进行更改,并在Server2数据库中应用这些更改。为此,我使用以下工作流: 将Server1数据库与架构进行比较,并使用Server1更改更新架构 将架构与Server2数据库进行比较,并将架构中的更改更新到数据库中 这通常可以正常工作,但我在上次重命名表中的列时发现了一个问题 通常,如果我重命名表中的列,更改将被检测为列重命名,

我使用SSDT来保持两个数据库的同步

为此,我在Server1中有一个数据库,在Server2中有一个数据库,在我的项目中有一个模式

我总是在Server1数据库中进行更改,并在Server2数据库中应用这些更改。为此,我使用以下工作流:

  • 将Server1数据库与架构进行比较,并使用Server1更改更新架构
  • 将架构与Server2数据库进行比较,并将架构中的更改更新到数据库中
这通常可以正常工作,但我在上次重命名表中的列时发现了一个问题

通常,如果我重命名表中的列,更改将被检测为列重命名,因此,当我将Server1与架构进行比较时,列重命名将被正确检测,并且我可以安全地完成我的工作流程

但是,上次我在Server1中重命名表中的列时,将其与架构进行比较时,它没有将更改检测为列重命名,而是将更改检测为drop列(使用旧名称)和create列(使用新名称)。显然,如果我在Server2数据库中应用这些更改,我将丢失重命名列中的所有数据

SSDT中的这种行为有什么原因吗?我可以告诉SSDT这是一个列重命名吗

我知道如何手工操作,但我更希望在SSDT中避免此问题,或者如果将来再次出现此问题,则能够解决它。

是否使用了“重构-->重命名”菜单选项?这就是如何让它包括在内,如果你这样做了,它没有工作,那么我会在连接文件的错误

要手动将其放入,请手动将其重命名,然后使用重构菜单,或者签入refactorlog.xml,手动添加条目非常容易


让我们知道发生了什么/你决定做什么

我认为有一些误解。您已经在一个真实的数据库上完成了列重命名,现在需要进行模式比较,以便将列重命名从数据库传播到SSDT项目。 它不会以这种方式工作,因为SSDT无法检测到该列实际上已重命名


正确的方案是首先重命名SSDT中的一列(右键单击该列->重构->重命名。将创建重构日志文件-您不能删除它)。然后在项目和目标数据库之间进行模式比较。更改将以列重命名的形式传播到服务器。

这似乎是显而易见的,所以我恐怕完全迷路了。我在VS2012&13中使用SSDT。我在比较窗口上。右键单击仅具有“包括/排除”选项。比较窗口顶部有一个按钮栏,带有比较、停止、更新等按钮。我在VS主菜单上找不到任何与SSTD相关的选项。如果我右键单击表定义脚本文件,我只会看到重构->[展开通配符,完全限定名称]。我有点瞎或者有点隐蔽;)请在答案中包含解释。非常感谢你的快速回答。我对这个答案投了赞成票,因为它是正确的,但是,正如我的评论所显示的,有一些信息使它完全可以理解,所以我选择了另一个作为解决方案。谢谢你。你在哪里找到重构的rename@JotaBe如果在打开.SQL文件后右键单击“T-SQL”窗口中的列,您应该会看到4个重构选项,其中一个是“重命名…”。如果您将项目与数据库进行比较,其他属性是否会显示为不同?有时候,你看不到细微的差别,但足以触发掉落/重新创建。另外,检查“refactorlog”文件以查看其中是否有用于重命名列的条目。如果没有,则可能需要创建它。最简单的方法是重命名为某个名称,然后重新命名-删除额外的重命名,您应该会很好。可以重命名列可以使用发布脚本传播到下一个服务器是的,可以。只需使用发布脚本或从dacpac部署到另一台服务器上即可。谢谢。我有一个表雇员(ID,FirstName,MiddleInitial,LastName,Age,DOJ)。我已经将其包含在EDMX中,并在整个开发、UAT和Prod环境中发布。现在,我们将字段MiddleInitial更改为MiddleName。我们在EDMX中重命名了该列。但是,当我们发布数据库时,MiddleInital值不会复制到MiddleName。不知道为什么它不这样做,请提供任何更正或解决方案?我会尝试生成publish SQL脚本,看看里面发生了什么。是的,我尝试了,它创建了一个临时表,其中包含一些名称和新列名(ID、FirstName、MiddleName、LastName、Age、DOJ),然后选择ID、FirstName、LastName、Age,DOJ列值从Employee表中删除,并插入到新的temp表中。最后,它删除employee表并将temp表重命名为employee表。有什么帮助吗