问题 将列添加到MSSQL Server中的特定位置


ALTER TABLE Log ADD log_id bigint IDENTITY BEFORE cust_id_fk

上面的代码为最后一个位置添加了一个新列。我希望它被添加到第一个位置。另外我想把它作为主键。


11766
2017-10-26 07:49


起源

表中列的“顺序” 真 无所谓 - 他们的物理存储顺序可能与你看到的不同。 - Damien_The_Unbeliever
它使 没有 差异除了你的OCD。 一 和 二。 FYI @Damien_The_Unbeliever支持你的一些信息 - gbn
我希望我的列看起来很漂亮。 - Chloe


答案:


您需要删除表并使用正确顺序的列重新创建它。如果在SSMS中更改表,则可以为您生成更改脚本,然后可以使用该脚本将更改部署到生产服务器。


9
2017-10-26 07:53



这是一个主观点。但是,您的问题被标记为SQL Server,因此我提到了SSMS。 - Ira Rainey
所以选择了你的答案,因为没有办法实现相同的 - Akhil K Nambiar
这就是为什么我们不再使用MSSQL(只是说)..可能会建议Google为“MongoDB”;) - sean2078


即使问题陈旧,也需要更准确的管理工作室。

您可以手动或使用Management Studio创建列。但是,Management Studio将需要重新创建表格,如果您已经有太多数据,将导致超时,除非表格很轻,否则请避免。

要更改列的顺序,您只需在Management Studio中移动它们。这不应要求(很可能存在异常)Management Studio重新创建表,因为它很可能会更改表定义中列的排序。

我已经在很多场合用这种方式完成了这些工作,由于其中的数据,我无法使用GUI添加列。然后使用Management Studio的GUI移动列并简单地保存它们。

你将从一个有保证的时间到几秒钟的等待。


3
2017-09-28 06:38





在MSSMS中,选择对象资源管理器中的表。右键单击并选择修改。 这将带来一个新选项卡,您可以在其中将列拖动到新的默认顺序。 保存并预先!完成。


0
2017-08-14 02:38





脚步:

  1. 将原始表重命名为tablename_temp
  2. 创建一个包含新列的新表
  3. 插入tablename select * from tablename_temp
  4. 在新表上重新创建外键和其他约束

0
2017-07-23 12:06





简短的回答:这是不可能的。

但您可以尝试以下步骤:

  1. 右键单击对象资源管理器上的表名称
  2. 单击任务
  3. 单击drop并创建表
  4. 将列添加到要添加的位置

如果你有数据。复制数据并将其粘贴到Excel电子表格中,编辑电子表格以包含新列,编辑前100行并将数据粘贴回表格中。

祝你好运


0
2018-06-05 09:50





您必须创建另一个表并复制数据。但看看“序数位置”并尝试更新它?

SELECT 
   ORDINAL_POSITION
  ,COLUMN_NAME
  ,DATA_TYPE
  ,CHARACTER_MAXIMUM_LENGTH
  ,IS_NULLABLE
  ,COLUMN_DEFAULT
FROM   
  INFORMATION_SCHEMA.COLUMNS 
WHERE   
  TABLE_NAME = 'Product' 
ORDER BY 
  ORDINAL_POSITION ASC; 

主键是另一个问题,您可以找到很多答案。


-2
2017-10-26 07:59



无关,无论如何都无法完成 - gbn
你正在考虑好的盒子,但这个答案不会奏效。 SMSS不允许重新订购。你必须删除并创建表。 - Onga Leo-Yoda Vellem