MSSQL标识ID的修改
今天机缘巧合,无意听到别人闲聊,突发奇想设计一套系统来解决他们的痛点,待我进一步分析下如何执行。回到主题,最近修改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的修改的更多相关文章
- Django项目:CMDB(服务器硬件资产自动采集系统)--04--04CMDB本地(Agent)模式客户端唯一标识(ID)
# client.py # ————————01CMDB获取服务器基本信息———————— from src import plugins #__init__.py from lib.serializ ...
- MSSQL数据库逻辑文件名修改与查看
逻辑文件名是什么 你用的程序连接的时候使用的是数据库名,然后你在你的数据库右击属性的时候,左上角单击"文件",可以看到,数据库名和逻辑文件名是不一样的,你可以看自己的数据库的路径下 ...
- mssql因为手贱修改了服务配置的最大内存,造成无法启动
mssql数据库设置内存太小,造成无法启动服务. 解决办法: 1.用命令行形式启动最精简版的mssql服务,另外再用一个新的命令行去修改配置,将内存设置为无限制. 命令行要记得用管理员身份运行比较稳 ...
- mssql数据库添加,修改,删除字段
通用式: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数 增加字段: alter table [表名] add 字段名 smalli ...
- row_number()over(partition by 字段 order by 字段)ID,修改重复行的字段值。
案例分析: 现在要查询一个表单里面的运费结果,但是他还有分录,为了显示分录,必须把表头显示出来,问题是,他要查询运费的合计, 但是这样就会导致重复行也加进去了,这样显然数据不准,为此,可以把重复的行设 ...
- mybatis plus 主键生成 Twitter雪花算法 id 及修改id为字符型
mybatis plus配置主键生成策略为2,就是 使用Twitter雪花算法 生成id spring boot中配置为: GlobalConfiguration conf = new GlobalC ...
- mssql 设置id自增 设置主键
主键自增长列在进行数据插入的时候,很有用的,如可以获取返回的自增ID值,接下来将介绍SQL Server如何设置主键自增长列,感兴趣的朋友可以了解下,希望本文对你有所帮助 1.新建一数据表,里 ...
- jQuery匹配id 批量修改css属性
<ul id="foreignCurrencyTree_1_ul"> <li id="foreignCurrencyTree_11_li"&g ...
- [jnhs]id字段修改错误导致hibernate hql查询整表只返回第一条数据
调试发现,查询到的就是一条数据 hql语句执行结果 Hibernate: select ballmodel0_.ball_id as ball_id1_1_, ballmodel0_.color as ...
随机推荐
- AJPFX外汇的常见形态
AJPFX:外汇价常见形态 外汇的价格,本质上是由供求关系决定的,但是在技术分析的世界里,是什么原因导致供求关系的改变并不重要,也没有人能准确的找出所有的因素并加以判断,但是供求关系被改变后的外汇走势 ...
- libffi-dev : 依赖: libffi6 (= 3.2.1-4) 但是 3.2.1-4kord 正要被安装
原文链接:https://blog.csdn.net/u013992330/article/details/85135629 中标麒麟安装python库:sshtunnel 的时候提示缺少ffi.h文 ...
- 18_python_类关系
一.类与类之间的关系 1.依赖关系 class Elephant: def __init__(self, name): self.name = name def open(self, ...
- 【ElasticSearch】:Mapping相关
Mapping 类似数据库中的表结构定义,主要作用如下: 定义Index下的字段名(Field Name). 定义字段类型,例如数值型.字符串型.布尔型等. 定义倒排索引相关配置,比如是否索引.记录p ...
- solr初识
参考资料http://blog.csdn.net/l1028386804/article/details/70199983
- 【xsy2194】Philosopher set+线段树合并
题目大意:给你一个长度为$n$的序列,有$m$次操作,每次操作是以下两种之一: 对某个区间内的数按照升序/降序排序,询问某个区间内数的积在十进制下首位数字是多少. 数据范围:$n,m≤2\times ...
- sql开启远程访问
我们用的是SQL Server 数据库 2008 版本,数据库配置完之后从另一台电脑访问数据库死活连接不上,提示信息如下 “ 无法连接到 *.*.*.*. 在于SQL Server建立连接时出现与网络 ...
- canvars 画花
index.html <!DOCTYPE html><html><head> <title>旋转的花</title> <meta ch ...
- 【转载】win7搜索文件怎么搜索文件名中带圆括号的文件
System.FileName:~=“(” 这样就行. 括号上加个引号 ~= 是包含的意思, ~< 是以什么为开头, = 是以什么为名, ~! 是不包含 来自: http://www.lao8. ...
- JAVA面试精选【Java算法与编程一】
在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来.算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时 ...