• SQL Server 主键及自增长列的修改


    一、对主键的修改

    主键值都会带有主键约束,当执行update操作或是其他操作的时候就会受到限制无法修改,解决的方法是:取消主键约束->删掉主键列->插入修改后的主键值。

    (1)取消主键约束

    取消主键约束的SQL语句如下:

    alter table [表名] drop constraint [主键名]
    输入表名和主键名时不要带中括号(下同),这里值得说明的是[主键名]并不是主键所在的字段名。主键名如果没有指定系统会自动分配一个,这时就需要查询主键名,查询主键名的方法如下:

    --使用sql存储方式进行主键的查询
    exec sp_pkeys @table_name='[表名]'
    --查询表的详细信息,在其中找到主键名
    sp_help [表名]
    在这里顺便介绍下如何查询主键的列名,虽然这可能用的不多,但以下这个方法还是比较直观的:

    select TABLE_NAME,COLUMN_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE
    where TABLE_NAME='[表名]'
    (2)删掉主键列

    上一步总结了一些补充的知识,这一步就简单许多了,方法如下:

    alter table [表名] drop column [字段名]
    (3)插入修改后的主键名

    alter table [表名] add constraint [主键名] primary key(字段名)
    值得说明的是,这里的主键名是自定义的主键名,指定之后如果以后还需取消主键约束就可以用这个主键名,而不再是系统自动分配的字段名了。

    二、自增长标识符的修改

    这个问题主要遇到的情形是,在删除了一段连续的带有自增长字段的一部分数据项之后,自增长序列不会自动补全,而是按照原先的计数继续增长。举个例一段连续的自增长字段(1,2,3,…,8,9),我们将其中的(7,8,9)delete掉后再向其中插入新的数据,此时新序列标号不是7而是10。

    解决的方法有两种:设置序列自增长开关和重置序列自增长起始数。

    (1)设置序列自增长开关

    取消序列的自增长的SQL语句:

    set identity_insert [表名] on
    这条语句执行完后,再进行插入时需要指定插入项的序列值,而不会引起序列的自增长。当修改完成后,如果还想让序列具有自增长性需要进行恢复操作:

    set identity_insert [表名] off
    (2)重置序列自增长起始数

    dbcc checkident([表名],RESEED,[数字])
    该语句可用来重置自增长序列的起始值,[数字]处设置起始值。

    dbcc checkident([表名],NORESEED)
    该语句可用来查询目前自增序列的当前值。

  • 相关阅读:
    MVVM
    vue-cli初始化项目2.x|3.x
    逻辑覆盖
    white box白盒测试
    black box黑盒测试
    总结回顾js arr的常见方法以及相关的使用场景(一)
    js 原生功底 (一)
    markdown 语法总结(一)
    阿里一面,面试官想看到的究竟是什么,带你揭秘!!!!
    关于Axios 源码你想了解的 在这儿
  • 原文地址:https://www.cnblogs.com/len0031/p/8469952.html
Copyright © 2020-2023  润新知