更改SQL Server 2008中现有表的列顺序/添加新列

时间:2010-03-21 22:28:37

标签: sql-server

我有这样的情况,我需要更改列的顺序/为SQL Server 2008中的现有表添加新列。它不允许我没有删除和重新创建。但那是在生产系统中并且在该表中有数据。我可以备份数据,删除现有表并更改顺序/添加新列并重新创建它,将备份数据插入新表中。

有没有最好的方法来做到这一点而不丢弃和重新创建。我认为SQL Server 2005将允许此过程,而不会在更改为现有表结构时删除和重新创建。

由于

6 个答案:

答案 0 :(得分:9)

您无法真正更改SQL Server 2008表中的列顺序 - 它在很大程度上也无关紧要(至少在关系模型中应该如此)。

使用SQL Server Management Studio中的可视化设计器,只要做出太大的更改,为SSMS执行此操作的唯一可靠方法是以新格式重新创建表,复制数据,以及然后放下旧桌子。你真的无法改变它。

所做的事情是使用SQL DDL语句向表中添加新列或从表中删除现有列:

ALTER TABLE dbo.YourTable
    ADD NewColumn INT NOT NULL ........

ALTER TABLE dbo.YourTable
    DROP COLUMN OldColumn

这样可行,但您无法影响列顺序。但同样重要的是:对于正常的操作,表格中的列顺序完全无关紧要 - 在您的打印输出或图表上最多只是一个装饰问题.....所以为什么你如此关注特定的列顺序?

答案 1 :(得分:3)

有一种方法可以通过更新SQL服务器系统表来实现:

1)在DAC mode

中连接到SQL服务器

2)运行将更新列顺序的查询:

update syscolumns 
set colorder = 3
where name='column2'

但是这种方式并没有被推荐,因为你可以在DB中销毁某些东西。

答案 2 :(得分:2)

一种可能性是不打扰重新排序表中的列,只需通过添加列来修改它。然后,创建一个视图,其中包含所需顺序的列 - 假设顺序非常重要。可以轻松更改视图以反映您想要的任何排序。由于我无法想象订单对程序化应用程序很重要,因此该视图应该足以满足那些可能重要的手动查询。

答案 3 :(得分:1)

正如其他海报所说的那样,没有办法重新编写表格(但SSMS会生成为你做这些的脚本)。

如果你还处于设计/开发阶段,我当然建议让列顺序合乎逻辑 - 没有什么比新添加的列成为多列主键的一部分并且不在其他列附近的地方更糟糕了!但你必须重新创建表格。

有一次我使用了第三方系统,它总是按字母顺序对列进行排序。这非常适合在他们的系统中查找列,但无论何时他们加速了他们的软件,我们的程序和视图都变得无效。不过,这是在旧版本的SQL Server中。我想自2000年以来,我没有看到错误的列顺序问题。当Access用于链接到SQL表时,我认为它在表链接时锁定在列定义中,这显然几乎任何表定义更改都存在问题。

答案 4 :(得分:1)

我认为最简单的方法是使用不同的名称以您希望的方式重新创建表,然后从现有表中复制数据,删除它,并重新命名新表。

答案 5 :(得分:0)

是否可以使用其所有数据对表进行脚本编写。 在像notepad ++

这样的脚本文件上进行编辑

因此,使用新列重新创建表,但相同。 只是一个建议,但可能需要一段时间才能实现这一目标。 除非你自己写一个小的c#应用程序,它可以使用该文件并对其应用规则。

如果只有notepadd ++支持查找和移动操作