如何更改SQL Server 2008中的现有表的列顺序

时间:2013-04-03 07:19:19

标签: sql-server

我的情况是我需要更改列的顺序/为SQL Server 2008中的现有表添加新列。

现有专栏

MemberName
MemberAddress
Member_ID(pk)

我想要这个订单

Member_ID(pk)
MemberName
MemberAddress

7 个答案:

答案 0 :(得分:83)

我得到了相同的答案, 继续SQL Server → Tools → Options → Designers → Table and Database Designers并取消选择Prevent saving changes that require table re-creation

enter image description here

2-打开表格设计视图,然后上下滚动列并保存更改。

enter image description here

答案 1 :(得分:12)

使用ALTER语句是不可能的。如果您希望按特定顺序排列列,则必须创建一个新表,使用INSERT INTO newtable(col-x,col-a,col-b)SELECT col-x,col-a,col-b FROM oldtable将数据从oldtable传输到newtable,删除oldtable并将newtable重命名为oldtable名称。

不一定建议这样做,因为列在数据库表中的顺序无关紧要。当您使用SELECT语句时,您可以命名列并按照您希望的顺序将它们返回给您。

答案 2 :(得分:7)

如果你的桌子上没有任何记录,你可以放弃,然后创建你的桌子。

如果有记录,您可以使用SQL Server Management Studio执行此操作。

只需点击您的表格>右键单击>单击“设计”,然后您可以通过拖动所需订单上的字段然后单击“保存”来排列列的顺序。

最好的问候

答案 3 :(得分:2)

在SQL中,依赖列顺序通常是一个坏主意。 SQL基于关系理论,从而无法保证顺序 - 按设计。您应该将所有列和行视为没有订单,然后更改查询以提供正确的结果:

对于列:

  • 尽量不要使用SELECT *,而是在select列表中指定列的顺序,如:SELECTName_ID,MemberName,TableName中的MemberAddress。这将保证订单,并且如果添加列,将简化维护。

对于行:

  • 只有在指定ORDER BY子句时才能保证结果集中的行顺序。
  • 如果未指定ORDER BY子句,则结果集可能不同,因为查询计划可能不同或数据库页可能已更改。

希望这会有所帮助......

答案 4 :(得分:2)

我试过这个并且没有看到任何方法。

这是我的方法。

  1. 右键单击表和脚本表以创建并启用此功能 一个SQL Query窗口,
  2. EXEC sp_rename 'Employee', 'Employee1' - 原始表名称为Employee
  3. 执行Employee创建脚本,确保按照您需要的方式排列列。
  4. INSERT INTO TABLE2 SELECT * FROM TABLE1。 - 插入员工选择姓名,公司来自Employee1
  5. DROP table Employee1

答案 5 :(得分:0)

将源代码管理和自动部署用于共享开发环境时,这可能是一个问题。在我工作的地方,我们在开发层上有一个非常大的样本数据库来处理(我们的生产数据的一个子集)。

最近我做了一些工作,从表中删除一列,然后在最后添加一些额外的列。然后我不得不撤消我的列删除,所以我在最后重新添加它,这意味着表和所有引用在环境中是正确的,但源控件自动部署将不再起作用,因为它抱怨表定义更改。

这里真正的问题是表+索引大约是120GB,环境只有~60GB可用,所以我需要:

a)重命名错误顺序的现有列,按正确顺序添加新列,更新数据然后删除旧列

OR

b)重命名表格,用正确的顺序创建一个新表格,从旧表格中插入新表格,然后从旧表格中删除

使用临时表的SSMS / TFS Schema比较选项不起作用,因为光盘上没有足够的空间来执行此操作。

我并不是说这是处理事情的最佳方式,或者列顺序真的很重要,只是我有一个场景,这是一个问题,我正在分享我想到的选项解决问题

答案 6 :(得分:-4)

将id列更改为第一个的SQL查询:

PendingIntent

或使用:

ALTER TABLE `student` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT FIRST;