今天机缘巧合,无意听到别人闲聊,突发奇想设计一套系统来解决他们的痛点,待我进一步分析下如何执行。回到主题,最近修改ID的工作做了不少。企业补充历史数据用。现总结如下:

1.想把递增ID某一段的ID都加上10,本以为写一条UPDATE 语句 如下

SET IDENTITY_INSERT c1 ON

UPDATE c1 SET ID=ID+10 WHERE ID<15 AND ID>10
             SET IDENTITY_INSERT c1 OFF

             结果执行错误:原因如下

标识符号没法直接更新,只能改为非标识符号才能更新,修改成非标识符号会修改表的创建时间。

2.不能主表跟子表同时设置为ID递增无效    

SET IDENTITY_INSERT c1 ON -- 设置标识符 可以添加 只能设置一个
SET IDENTITY_INSERT g1 ON -- 同时允许无效
SET IDENTITY_INSERT c1 OFF -- 当插入的标识ID大于现有ID 则系统按最大的进行递增
3.插入标识ID的方法
--将ID=3的记录的ID值改为2
SET IDENTITY_INSERT t1 ON
INSERT t1(ID,A) SELECT 2,A FROM t1 WHERE ID=3
DELETE FROM t1 WHERE ID=3
SET IDENTITY_INSERT t1 OFF

SET IDENTITY_INSERT c1 ON
INSERT INTO C1
(
ID
)
SELECT ID FROM dbo.g2 WHERE ID BETWEEN 50 AND 60
SET IDENTITY_INSERT c1 OFF

4.创建临时表,临时表上修改标识ID,再插入现有表格。

select * into userTemp from user where 1<>1      --复制表结构

ALTER TABLE user
ADD NEW_ID INT
GO
UPDATE user SET NEW_ID=ID      --以前的增加一个字段,保留原有标识ID,便于后期维护用
GO

SET IDENTITY_INSERT C_StockUp_PackingTemp ON
INSERT INTO C_StockUp_PackingTemp
(
ID,
StockUpId,
Packing,
PackingNumb,
PackingSM,
NEW_ID
)
SELECT
ID,
StockUpId,
Packing,
PackingNumb,
PackingSM,NEW_ID FROM C_StockUp_Packing
SET IDENTITY_INSERT C_StockUp_PackingTemp OFF

--需要手动建主键,去标识符号

DECLARE @ID INT
DECLARE @i INT
SET @i=0
DECLARE cur_g5 CURSOR FOR SELECT id FROM G5 ORDER BY id
OPEN cur_g5
FETCH NEXT FROM cur_g5 INTO @ID
WHILE @@FETCH_STATUS=0
BEGIN
--PRINT CONVERT(VARCHAR,@ID)+'--'+CONVERT(VARCHAR,@i)+'--'+CONVERT(VARCHAR,@ID+@i)
UPDATE C_StockUp_PackingTemp SET ID=ID+1 WHERE ID>@ID+@i
SET @i=@i+1
FETCH NEXT FROM cur_g5 INTO @ID
END
CLOSE cur_g5
DEALLOCATE cur_g5

--DELETE FROM C_StockUp_Packing WHERE ID>81847

SET IDENTITY_INSERT C_StockUp_Packing ON
INSERT INTO C_StockUp_Packing
(
ID,
StockUpId,
Packing,
PackingNumb,
PackingSM,NEW_ID
)
SELECT
ID,
StockUpId,
Packing,
PackingNumb,
PackingSM,NEW_ID FROM C_StockUp_PackingTemp WHERE ID>93304
SET IDENTITY_INSERT C_StockUp_Packing OFF

GO

5.MSSQL有做发布订阅如何追加历史标识ID

发布订阅服务器系统默认两套数据库的ID阈值不一致,合并后数据库会有很多间隙ID可以直接插入。

sp_adjustpublisheridentityrange @table_name='表名'    --ID冲突时设置表重新获取最新的阈值范围

sp_helpconstraint '表名'       --查看表的约束条件;获取表的取值范围。

dbcc checkident('表名',reseed,182831)     --设置标识ID的现在最大值。

以上几点我入坑很久都没有办法解决追加历史ID的功能。

其实方法很简单

alter table 表名 nocheck constraint all         --禁用约束条件

导入写好数据信息

alter table 表名 check constraint all             --启用约束条件

MSSQL标识ID的修改的更多相关文章

  1. Django项目:CMDB(服务器硬件资产自动采集系统)--04--04CMDB本地(Agent)模式客户端唯一标识(ID)

    # client.py # ————————01CMDB获取服务器基本信息———————— from src import plugins #__init__.py from lib.serializ ...

  2. MSSQL数据库逻辑文件名修改与查看

    逻辑文件名是什么 你用的程序连接的时候使用的是数据库名,然后你在你的数据库右击属性的时候,左上角单击"文件",可以看到,数据库名和逻辑文件名是不一样的,你可以看自己的数据库的路径下 ...

  3. mssql因为手贱修改了服务配置的最大内存,造成无法启动

    mssql数据库设置内存太小,造成无法启动服务. 解决办法: 1.用命令行形式启动最精简版的mssql服务,另外再用一个新的命令行去修改配置,将内存设置为无限制.  命令行要记得用管理员身份运行比较稳 ...

  4. mssql数据库添加,修改,删除字段

    通用式: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数 增加字段: alter table [表名] add 字段名 smalli ...

  5. row_number()over(partition by 字段 order by 字段)ID,修改重复行的字段值。

    案例分析: 现在要查询一个表单里面的运费结果,但是他还有分录,为了显示分录,必须把表头显示出来,问题是,他要查询运费的合计, 但是这样就会导致重复行也加进去了,这样显然数据不准,为此,可以把重复的行设 ...

  6. mybatis plus 主键生成 Twitter雪花算法 id 及修改id为字符型

    mybatis plus配置主键生成策略为2,就是 使用Twitter雪花算法 生成id spring boot中配置为: GlobalConfiguration conf = new GlobalC ...

  7. mssql 设置id自增 设置主键

    主键自增长列在进行数据插入的时候,很有用的,如可以获取返回的自增ID值,接下来将介绍SQL Server如何设置主键自增长列,感兴趣的朋友可以了解下,希望本文对你有所帮助     1.新建一数据表,里 ...

  8. jQuery匹配id 批量修改css属性

    <ul id="foreignCurrencyTree_1_ul"> <li id="foreignCurrencyTree_11_li"&g ...

  9. [jnhs]id字段修改错误导致hibernate hql查询整表只返回第一条数据

    调试发现,查询到的就是一条数据 hql语句执行结果 Hibernate: select ballmodel0_.ball_id as ball_id1_1_, ballmodel0_.color as ...

随机推荐

  1. 使用PerfView监测.NET程序性能(一):Event Trace for Windows

    前言: 在日常项目开发中,我们时不时会遇到程序占用了很高CPU的情况,可能是程序里某些未经优化的代码或者Bug,或者是程序运行压力太大.无论是什么原因,我们总希望能看到到底是哪个方法占用了如此高的CP ...

  2. oracle查询语句查询增加一列内容

    select a,sys_guid() as b from mytable sys_guid() 是生成带分隔符(-)的GUID的自定义函数 查询B表的内容插入A表,MY_ID是A表的主键不可为空,因 ...

  3. powerviot report cannot refresh data

    配置完成powerviot后发现打开excel无法刷新数据源连接提示出错: 在security token service服务应用中新建application,如图创建,然后将excel里面的auth ...

  4. ovs stp

    环路拓扑 组成拓扑结构的脚本 构成连通脚本 ip netns add ns1 ovs-vsctl add-br br1 ovs-vsctl add-port br1 tap1 -- set Inter ...

  5. PKI信息安全知识点

    1. 什么是X.509? X.509标准是ITU-T设计的PKI标准,他是为了解决X.500目录中的身份鉴别和访问控制问题设计的. 2. 数字证书 数字证书的意义在于回答公钥属于谁的问题,以帮助用户安 ...

  6. Python MySQL - 创建/查询/删除数据库

    #coding=utf-8 import mysql.connector import importlib import sys #连接数据库的信息 mydb = mysql.connector.co ...

  7. 剑指offer三从头到尾打印链表

    一.题目: 输入一个链表,从尾到头打印链表每个节点的值. 二.解题方法: 方法一:采用递归的方式实现 方法二:借助堆栈的“后进先出”实现 import java.util.ArrayList; imp ...

  8. K-means算法的原理、优缺点及改进(转)

    文章内容转载自:http://blog.csdn.net/sinat_35512245/article/details/55051306                                ...

  9. STL简洁 && c++读取cfg文件

    在c++工程中,往往需要修改一些变量来实现不同的功能效果,这是cfg文件的使用可以使得工程更加高效与便利,这篇文章介绍的就是c++读取cfg文件的相关内容,以便及时总结和日后回顾. STL即标准模板库 ...

  10. Java 内存分配及垃圾回收机制初探

    一.运行时内存分配 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域. 这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则 ...