【问题标题】:Problem Changing Column Order in a Table (SQL Server 2008)更改表中的列顺序时出现问题 (SQL Server 2008)
【发布时间】:2009-05-30 22:04:12
【问题描述】:

当我尝试更改此列列表时:

Nombre
Imagen
Descripcion
Activo
IdLineaProducto

进入这个(IdLineaProducto 是第一个)

IdLineaProducto
Nombre
Imagen
Descripcion
Activo

SQL Server Management Studio 表示不允许保存更改,因为必须删除并重新创建表(西班牙语...)。我可以在 SQL Server 2005 中执行此操作,但在 SQL Server 2008 中不行。

在其他情况下也会发生同样的情况,例如尝试将 int 非标识列转换为标识。为什么会这样?我该如何解决这个问题?也许是一些配置错误的问题? SQL Server 中的一些新功能?

【问题讨论】:

    标签: sql-server ddl


    【解决方案1】:

    我找到了solution to this problem

    这是设计使然,可以快速 通过在 Management Studio 中修复 取消选中属性。解决这个问题 Management Studio,转到工具-> 选项然后转到设计器页面 并取消选中“防止保存更改 需要重新创建表”。

    注意它可能有undesired consequences,比如丢失与此相关的其他表中的数据。

    【讨论】:

    • 接受你的回答。看起来你回答了你自己的问题。我想知道为什么 SQL2008 不可能,因为它是以前的版本。 +1
    【解决方案2】:

    这就是它的工作方式...您只能将列添加到末尾,除非您 DROP 它和 CREATE 它(通常将数据复制出来再复制回来,IDE 可能会提供帮助) .但是为什么你要改变顺序呢?即使它不理想,您的 SELECT 等也可以处理这个......即

    SELECT IdLineaProducto, Nombre, Imagen, Descripcion, Activo
    FROM   TheTable
    ...
    

    (仅使用SELECT * 很少是一个好主意)


    回复IDENTITY;同样,这是该列的基础 - 尽管在这种情况下您可以将数据复制出来,DROP 列,然后将ADD 列复制为 IDENTITY(在右侧),然后将其复制回来in - 但是你对IDENTITY INSERTSEED 值有额外的复杂性(所以你不要尝试获取现有标识值的重复项)。

    【讨论】:

    • 嗯,是的,你是对的。但我曾经以某种逻辑顺序查看数据库列,特别是当表有很多列时。另外,我说的是与设计师合作,而不是 TSQL 代码。当我与设计师合作时,我会收到这些信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多