更改列Ordinal_position位置

时间:2010-09-23 11:19:42

标签: sql tsql

我的情景:

我可以更改表中列的序号位置。有没有办法在不重新创建表的情况下更改表中列的序号位置?

4 个答案:

答案 0 :(得分:4)

,如果您希望实现此目的,则必须重新创建表格。 (SQL SERVER)

即使您在SSMS中执行此操作,您也会看到生成的脚本也会重新创建表。

答案 1 :(得分:1)

不在SQL Server中 - 不确定其他RDBMS。

您可以使用所需的序数位置创建一个视图,但我认为唯一有用的时间是使用SELECT *,这是一种应该避免的做法。

答案 2 :(得分:0)

您好,这取决于您使用的数据库系统。 例如,在某些情况下,可以删除并添加列,您可以在程序部分执行此操作,也可以在其中重新填充。

但总的来说,它应该无关紧要,因为您可以在select语句中定义返回的数据顺序。对你来说还不够吗?

答案 3 :(得分:0)

不重新创建表是不可能的。但是,如果您担心丢失数据,SQl Server Management Studio 提供了一个选项。

注意:我使用的是 Sql Server 2019 Developer Edition。

  1. 右键单击表格名称并选择设计选项
  2. 使用光标将列的位置拖动到所需位置

SQlServer Table Design Options

如果你想在脚本级别做,你可以看下面SSMS提供的思路

启用工具菜单 --> 选项 --> 设计器 --> 表和数据库设计器中可用的“自动生成更改脚本”选项。

Enabling the Auto Generate Change Script Option

当您在 SSMS 中拖动列时,它会自动为您创建脚本。

自动生成脚本中的高级想法是,

  1. 使用具有所需列顺序的 Temp_YourTableName 创建表
  2. 将原始表中的所有数据复制到新的 Temp_YourTableName
  3. 删除原始表
  4. 将 Temp_YourTableName 重命名为原始 YourTableName

当然要在事务范围内做所有事情,以避免在脚本执行时丢失任何数据。

我找到了一个很好的理由来说明为什么我们需要花一些时间here。有趣的是,它是基于 Context 而不是对 Technical 做任何事情。

例如,原始地址表包含、街道地址 1、城市、州、邮编和国家列。如果要求更改为包括街道地址 2 之类的新列,这将意味着已满。