Sql server 在SQL Server 2008中更改列顺序/为现有表添加新列

Sql server 在SQL Server 2008中更改列顺序/为现有表添加新列,sql-server,Sql Server,在SQLServer2008中,我需要更改列的顺序/为现有表添加新列。这是不允许我做不掉和重建。但这是在生产系统中,并且在该表中有数据。我可以备份数据,删除现有表并更改顺序/添加新列并重新创建,将备份数据插入新表 有没有最好的方法来做到这一点,而不下降和重建。我认为SQLServer2005将允许此过程,而无需在更改为现有表结构时删除和重新创建 谢谢您不能真正更改SQL Server 2008表中的列顺序-这在很大程度上也是不相关的(至少在关系模型中应该如此) 使用SQL Server Mana

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

有没有最好的方法来做到这一点,而不下降和重建。我认为SQLServer2005将允许此过程,而无需在更改为现有表结构时删除和重新创建


谢谢

您不能真正更改SQL Server 2008表中的列顺序-这在很大程度上也是不相关的(至少在关系模型中应该如此)

使用SQL Server Management Studio中的visual designer,一旦您做了太大的更改,为SSMS执行此操作的唯一可靠方法是以新格式重新创建表,复制数据,然后删除旧表。你真的没办法改变它

您可以随时使用SQL DDL语句向表中添加新列或从表中删除现有列:

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

ALTER TABLE dbo.YourTable
    DROP COLUMN OldColumn

这是可行的,但您无法影响列顺序。但同样:对于您的正常操作,表中的列顺序是完全不相关的——它充其量只是打印输出或图表上的一个装饰性问题。。。。。那么,为什么您如此专注于一个特定的列顺序呢?

一种可能是不必麻烦对表中的列重新排序,只需通过添加列来修改它。然后,创建一个视图,其中列的顺序是您想要的——假设顺序确实很重要。可以轻松更改视图以反映所需的任何顺序。由于我无法想象顺序对编程应用程序很重要,因此该视图应该足以满足那些可能很重要的手动查询。

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

1) 连接到中的SQL server

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

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

但是这种方式是不可取的,因为您可以在DB中销毁某些内容。

正如其他海报所说,不重新编写表是不可能的(但SSMS将生成脚本,为您执行此操作)

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


有一次,我使用了一个第三方系统,它总是按照字母顺序对列进行排序。这对于在他们的系统中查找列非常有用,但每当他们升级软件时,我们的过程和视图都会失效。不过,这是在较旧版本的SQL Server中实现的。我认为自2000年以来,我没有看到过错误列顺序的问题。当Access用于链接SQL表时,我认为它在链接表时锁定在列定义中,这显然与几乎所有表定义的更改有关。

是否可能使用表的所有数据编写脚本。 用记事本之类的工具对脚本文件进行编辑++

因此,使用新列重新创建表,但相同。 这只是一个建议,但可能需要一段时间才能完成。 除非您自己编写一个小型c#应用程序,可以处理该文件并对其应用规则


如果notepadd++只支持查找和移动操作,我认为最简单的方法就是用不同的名称重新创建表,然后从现有表复制数据,删除它,然后重新命名新表。

我绝对不建议使用“sys*”系统目录表!你只是自找麻烦……我已经写过了,不推荐这样做。但据我所知,这正是问题的作者想要做的。因为只有一种可能的方法可以在不添加/删除列的情况下更改COLLMNS顺序,即在DB.Column order change中更新syscolumns表,这只是出于viewin目的,与从数据库中请求的相同Client@rmdussa首先,我从不让客户端对表拥有任何权限。我通常不会将表定义视为数据库提供的服务定义的一部分。因此,我可以自由地进行更改,并且不必为了演示的目的而承诺任何特定的表设计。视图、表值函数、存储过程等是我的数据库通常公开的接口。@rmdussa:在这种情况下,只需在SELECT语句中按要求的顺序列出所需的字段-不需要其他任何内容…在某些情况下,顺序很重要,例如,当我们使用某种ORM(如EF with DB First)方法时,我想在多台主机上发布web应用程序。此外,当我查看表格和图表时,我希望数据库中有一个清晰的视图。我不需要看到一些表格和想象其他排序。