【问题标题】:SQL Server -- Any way to add a column and make it first column in table? [duplicate]SQL Server - 有什么方法可以添加一列并使其成为表中的第一列? [复制]
【发布时间】:2014-12-12 05:11:14
【问题描述】:

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

但我想确保以后看到它的人会看到它添加了身份列,所以我真的想将它设为第 1 列。我知道这对系统的操作完全无关紧要;仅供人类阅读。

有人知道这样做的方法吗?我查看了 Alter Table 和 column_definition 的 TSQL 语法,但什么也没看到;但我希望有人知道实现这一点的方法。

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

感谢您的任何建议。

【问题讨论】:

  • 您可以重命名当前表,创建一个与第一列具有相同架构和标识列的新表并复制数据。
  • 我只知道如何在 SSMS 中。请注意,如果它不是最后一列,它确实会移动数据。所以如果有大桌子可能需要一段时间。视图会起作用吗?
  • 我和@Blam 在一起,我只是创建一个视图,按照您希望的方式对列进行排序。
  • AHiggins,抱歉——我发现之前有人问过这个问题,而且肯定使用了错误的关键字。是的,这是对那个问题的重复。
  • 或者,阅读 Paul 的回答 here

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


【解决方案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

drop table
    mytable

exec sp_rename
    'newtable', 'mytable'

【讨论】:

    【解决方案2】:

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

    这不一定是推荐的,因为列在数据库表中的顺序无关紧要。当您使用 SELECT 语句时,您可以命名列并让它们按照您想要的顺序返回给您。

    使用对象探索

    避免这一步..因为 ssms 工具可以让您进行轻松的数据管理,在进行多列记录的更改时,您可能会丢失一些数据..等等..因为您的处理器速度有多快它总是会挂起用于改变架构..

    一旦数据丢失..你将无处可取......发生在我身上..

    【讨论】:

    • 是的,我已经对解决方案进行了编码,但我想看看这里是否有人知道某种技巧。好像没有肥皂。我必须在最后选择身份,这可能会使一些未来的程序员感到困惑,或者承担与重命名/新表/复制数据解决方案相关的小风险。谢谢。
    • 回答的新更新,你也会喜欢的。。还有一些,不要添加
    【解决方案3】:

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

    【讨论】:

    • 啊哈。我怀疑是这样。我什至已经编码了重命名/创建新/复制数据/删除表解决方案;我只是希望尽可能避免它。谢谢。
    • 您可以复制 Microsoft 使用 SQL 脚本使用的相同功能……事实上,界面本身包括一个生成该脚本的选项。它不仅限于 Management Studio 图形界面。
    • 是的,当我说我已经将它“编码”时,大约 90% 来自生成的脚本。问题是,这可能会在我的时间凌晨 2:00 在 5000 英里外的一台未联网的计算机上执行——如果它由于某种疯狂的原因而失败,我就完蛋了。所以我们可能会在“错误”的位置上忍受它。不过,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多