一、对主键的修改

主键值都会带有主键约束,当执行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)
该语句可用来查询目前自增序列的当前值。

SQL Server 主键及自增长列的修改的更多相关文章

  1. Sql Server 主键 外键约束

    主键约束 表通常具有包含唯一标识表中每一行的值的一列或一组列. 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束. 如果为 ...

  2. Sql Server 主键由字母数字组成并按照数字自动增长

    在SQL SERVER 中如果我们想要使主键按照一定规则自动增长我们可以这样做: 这里我们新建一张研究表,里面有研究ID,研究人员姓名和研究医院. 我们使SicentificId 设为主键 并且从1开 ...

  3. 数据库开发基础-SQl Server 主键、外键、子查询(嵌套查询)

    主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个 ...

  4. SQL Server 插入数据时自增长列如何指定数值

    SQL Server 表在导入数据时,有时需要将自增长列指定数值,来保证导入前后的数据完全一致,如何实现? SQL Server 提供了方法: SET IDENTITY_INSERT,允许将显式值插入 ...

  5. SQL Server主键自动生成_表and存储过程

    主键表: CREATE TABLE [dbo].[KEYCODE]( [KeyName] [varchar](12) NOT NULL, [KeyTableName] [varchar](40) NU ...

  6. Ms Sql server 主键并发冲突解决办法

    问题原因,同事把表的自增长ID主键,改成是自定义的编号,没有严格的并发测试.在多线程同时插入数据时会引起主键冲突: 看了一些道友的文章,尝试了几个方法.经测试 使用 WITH(updlock)  可以 ...

  7. SQL SERVER 主键约束

    主键约束: 遵循关系型模型中的第二范式.唯一的识别一条记录,不能为空. CREATE TABLE Persons ( Id_P int NOT NULL PRIMARY KEY, LastName v ...

  8. SQL Server —— 主键和外键

    一.定义 1.1.什么是主键和外键 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,班级)其中 ...

  9. delphi ----处理SQL server主键自增,并给定值

    获取一个表中最大的值. function GetNEWID(tablename: string): string; begin Result:=''; with DMW_Public.DQ_Pub d ...

随机推荐

  1. volatile关键字作用

    1.阻止编译器对代码进行优化.即读取某个变量值时,不从寄存器中读取而是从变量里读. 2.编译器的优化 在本次线程内,当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中:以后 ...

  2. 安卓入门——————简单记账本的开发(二)-点击listview跳转并实现数据的更新

    前言:   这个博客主要实现listview的跳转并实现对数据库内容的更新并显示到listview上,还没有实现listview的实时更新和listview具体线条的添加(接下来的几篇博客会实现),如 ...

  3. Charles 抓包工具(新猿旺学习总结)

    Charles 抓包工具安装机操作 1.Charles 抓包工具是代理服务器工具,可以拦截数据,进行更改,返回数据,以实现前端后台的请求和响应数据的测试2.Charles 菜单介绍 Charles抓包 ...

  4. Linux 下 ls -l 命令执行显示结果的每一列含义【转载】

    转自:zhuoya_的博客 原文地址>>https://blog.csdn.net/zhuoya_/article/details/77418413

  5. springboot-yml内list、map组合写法

    yml:myProps: varmaplist: key11: - t1 - t2 - t3 key22: - t11 - t22 - t33 list: - topic1 - topic2 - to ...

  6. input框输入金额显示千分位

    比如输入:1000000,则显示为1,000,000(或者是保留3位小数:1,000,000.000) 知识点: 1)JavaScript parseFloat() 函数: 定义:parseFloat ...

  7. Java 基础知识点小结

    小知识点 所有的程序,都要定义在类里面: 异常 定义方法时,使用 throws 可以用来捕获方法体内没有捕获的异常,然后以 SomeException 抛出异常 java是解释型语言.java虚拟机能 ...

  8. 利用 Charles Proxy 下载旧版本 iOS App

    一.软件准备 1.旧版本 iTunes1.IPSW Downloads:https://ipsw.me/2.百度网盘链接: https://pan.baidu.com/s/1PO9Z12o-rqZ_J ...

  9. Java基础之数组(一)

    数组的定义 数组是相同类型数据的有序集合.数组描述的是相同类型的若干个数据,按照 一定的先后次序排列组合而成.其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们.数组的三个基本特 ...

  10. hibernate 一对多关系中的孤儿属性

    @OneToMany(targetEntity = BenefitType.class, mappedBy = "sitePerson",cascade = CascadeType ...