重命名表格的结果是CREATE语句而不是ALTER。

3

在一个.sqlproj文件中,我已经改变了一张表的名称(还有其他改动)。我是通过Visual Studio 2012右键点击“重构”选项进行重命名的。当我尝试发布这些更改时,部署脚本使用的是CREATE TABLE命令而不是ALTER TABLE命令来对表进行重命名。我在这里做错了什么?


如果进行模式比较,您会看到什么不同?有没有可能与您的原始项目相比,列的顺序不同或聚集索引不同,或者其他可能导致重建的情况? - Peter Schott
@PeterSchott 谢谢,但事实证明 __RefactorLog 表丢失了,因此脚本跳过了所有重构步骤,只是 CREATE 而不是 ALTER。 - paul.dev
2个回答

2
我已经找到了问题的根源。我发布脚本的数据库是真实数据库的一个副本(bacpac)。bacpac缺少dbo.__RefactorLog表,所以运行脚本时会忽略refactorlog文件并创建数据库。

0

你需要修改已经存在的内容,因为脚本创建了表,所以你应该将其保留为CREATE TABLE,在脚本中更改名称不会有任何作用,只会尝试更改不存在的表的名称,这显然会导致错误。

此外,如果你已经有一个名为foo的表,并且想要将其名称从foo更改为bar,你不会使用Alter table命令,而是使用以下系统存储过程。

EXECUTE sp_rename 'dbo.foo', 'bar'

该表已经存在,我尝试对其进行重命名。然而,在部署脚本中重命名结果是创建而不是修改。 - paul.dev
如果表已经存在,则使用上述语句而不是使用alter table语句。 - M.Ali
我不确定你是否熟悉我正在使用的方法来进行数据库更改。部署脚本是根据我对项目所做的更改自动生成的。 - paul.dev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接