SQL Server - 任何添加列并使其成为表中第一列的方法?

时间:2014-10-16 18:08:53

标签: sql sql-server alter-table identity-column

我正在修改现有表以添加标识列。我能做到,没问题。

但是我想确定将来会看到它的人会看到它添加了标识栏,所以我真的想把它列为第1列。我知道这对于它来说是完全无关紧要的。系统的运作;它严格用于人类阅读。

有谁知道这样做的方法?我已经查看了Alter Table和column_definition的TSQL语法,但没有看到任何内容;但我希望有人知道如何实现这一目标。

FWIW,这是一次性操作(但在许多服务器上,所以它需要自动化),所以我不担心是否有任何"技巧"可能会在将来消失 - 只要它现在有效。我们正在使用最新版本的SQL Server Express。

感谢您的任何建议。

3 个答案:

答案 0 :(得分:1)

根据Microsoft的说法,您只能使用SQL Server Management Studio执行此操作。 查看this

答案 1 :(得分:1)

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

使用对象探索

避免这一步..因为ssms工具让你做轻量级数据管理,而在进行多列记录的更改时,你最终可能会丢失一些数据..等等。因为你的处理器有多快它总会挂起改变建筑..

一旦数据丢失......你将无法将它们带回去......发生在我身上......

答案 2 :(得分:1)

按照以下步骤解决此问题:

-- First, add identity column
alter table
    mytable

add
    id int identity(1, 1) not null

-- Second, create new table from existing one with correct column order
select
    id,
    col1,
    col2

into
    newtable

from
    mytable

现在您已经使用重新排序的列newtable了。如果需要,您可以放弃mytable并将newtable重命名为mytable

exec sp_rename
    'newtable', 'mytable'