none
如何用SQL指令删除Identity属性? RRS feed

  • 问题

  • 查了帮助文档,没找着。。。奇怪了,跟踪:SSMS却是创建新表再导入数据的方式
    在2000时代,还可以更新SysColumns,在2008,不允许更新系统字典了。。。
    如何用SQL指令删除一个表的Identity属性?或者MS根本没提供?

    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com
    2010年3月8日 8:05

答案

  • 不能刪除,可用新增一列處理

    如:

    alter table t add NewID int
    go
    update T set NewID=ID

    alter table t drop column ID

    sp_rename 't.newID','ID','Column'
    go

    新建一個表,把數據轉過去,再刪除表,重命名新表
    ROY WU(吳熹 )
    2010年3月8日 8:20
    版主
  • Or change it in table design page in ssms.
    2010年3月8日 15:20
  • 没有直接的, 可以这样做:
    1. 加一个字段, 除 identity 外, 其他属于与 identity列一样
    2. update 新字段的值为 identity 列
    3. drop identity 列
    4. 将新字段的名字改为旧的 identity 列名
    所有的操作在一个事务中完成就好了, 当然, 这样导致的结果是列顺序被改变了

    或者用 ssms 中的表设计来改, 那样是按照需要的结果建一个新表, 导数据到新表, 再删除原始表, 并将新表改名为原始表名
    如果表中有很大量的数据, 这个操作会比较花时间, 所以如果手工来处理的话, 可以把导数据的处理部分改成 switch 操作, 这样就快了.
    2010年3月9日 4:13

全部回复

  • 不能刪除,可用新增一列處理

    如:

    alter table t add NewID int
    go
    update T set NewID=ID

    alter table t drop column ID

    sp_rename 't.newID','ID','Column'
    go

    新建一個表,把數據轉過去,再刪除表,重命名新表
    ROY WU(吳熹 )
    2010年3月8日 8:20
    版主
  • 如果想使identity属性不起作用 可以使用

    set identity_insert tablname on 来关闭这个
    family as water
    2010年3月8日 9:21
  • Or change it in table design page in ssms.
    2010年3月8日 15:20
  • 没有直接的, 可以这样做:
    1. 加一个字段, 除 identity 外, 其他属于与 identity列一样
    2. update 新字段的值为 identity 列
    3. drop identity 列
    4. 将新字段的名字改为旧的 identity 列名
    所有的操作在一个事务中完成就好了, 当然, 这样导致的结果是列顺序被改变了

    或者用 ssms 中的表设计来改, 那样是按照需要的结果建一个新表, 导数据到新表, 再删除原始表, 并将新表改名为原始表名
    如果表中有很大量的数据, 这个操作会比较花时间, 所以如果手工来处理的话, 可以把导数据的处理部分改成 switch 操作, 这样就快了.
    2010年3月9日 4:13
  • 感谢回答  看来偶得写个建议给SQL TEAM
    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com
    2010年3月9日 12:30