63

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

现有列

MemberName
MemberAddress
Member_ID(pk)

我想要这个订单

Member_ID(pk)
MemberName
MemberAddress
4

7 回答 7

109

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

在此处输入图像描述

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

在此处输入图像描述

于 2015-03-11T09:29:23.987 回答
14

使用 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 语句时,您可以命名列并让它们按照您想要的顺序返回给您。

于 2014-03-12T12:38:15.610 回答
8

如果您的表没有任何记录,您可以删除然后创建您的表。

如果它有记录,您可以使用 SQL Server Management Studio 来完成。

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

最好的祝福

于 2013-04-03T07:26:07.530 回答
2

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

对于列:

  • 尽量不要使用 SELECT *,而是指定选择列表中列的顺序,如下所示:SELECT Member_ID、MemberName、MemberAddress from TableName。如果添加列,这将保证订单并简化维护。

对于行:

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

希望这可以帮助...

于 2013-04-03T07:45:29.063 回答
2

我试过了,没有看到任何方法。

这是我的方法。

  1. 右键单击表和脚本表进行创建,并在其中一个 SQL 查询窗口中使用它,
  2. EXEC sp_rename 'Employee', 'Employee1' -- 原始表名是Employee
  3. 执行 Employee 创建脚本,确保以您需要的方式排列列。
  4. INSERT INTO TABLE2 SELECT * FROM TABLE1. -- 插入员工选择姓名,公司从员工1
  5. DROP table Employee1.
于 2013-12-24T07:59:44.823 回答
0

当使用源代码控制和自动部署到共享开发环境时,这可能是一个问题。在我工作的地方,我们的开发层上有一个非常大的示例数据库可供使用(我们生产数据的一个子集)。

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

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

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

或者

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

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

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

于 2016-02-03T10:25:47.143 回答
-4

将 id 列更改为 first 的 SQL 查询:

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

或通过使用:

ALTER TABLE `student` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT AFTER 'column_name' 
于 2016-02-18T09:57:52.643 回答