IDENTITY 的小技巧--SQL Server 2005
备份数据库遇到一个问题,就是将旧数据搬移到新主机数据表的时候,如果主键是的 IDENTITY 是设定自动增加的话,那么旧有的主键数据,在新数据表上面就好像是重新编号一样又从第 1 笔开始塞到第 N 笔。
例如 :
某台主机上旧有数据如下,C1 字段是自动编号,但是可能经过使用者动作,可能只剩下 1、3、4、7、11 这几笔。
塞到新数据表,C1 字段就变成 1、2、3、4、5 完全走样了。
后来发现原来要设定 IDENTITY_INSERT 的选项,才有办法自己设定自动编号的域值。
语法如下:

-- 开启 TestTable 的 IDENTITY_INSERT 属性
SET IDENTITY_INSERT TestTable ON
-- 关闭 TestTable 的 IDENTITY_INSERT 属性
SET IDENTITY_INSERT [TestTable] OFF
--如果要重设数据表的 IDENTITY 的编号的话,则要使用 DBCC CHECKIDENT 指令来设定,以下为操作范例:
-- 将数据表数据删除, 并重设 IDENTITY
TRUNCATE TABLE [TestTable]
-- 开启数据表可自行输入 IDENTITY 的功能
SET IDENTITY_INSERT [TestTable] ON
-- 准备数据源
CREATE TABLE #tt
(
C1 int,
C2 nvarchar(50),
C3 nvarchar(50)
)
INSERT INTO #tt ( C1, C2, C3 )
VALUES ( 1, '1', '2' )
INSERT INTO #tt ( C1, C2, C3 )
VALUES ( 3, '2', '4' )
INSERT INTO #tt ( C1, C2, C3 )
VALUES ( 4, '3', '6' )
INSERT INTO #tt ( C1, C2, C3 )
VALUES ( 7, '4', '8' )
INSERT INTO #tt ( C1, C2, C3 )
VALUES ( 11, '5', '10' )
-- 将数据源塞入目的数据表
INSERT INTO [TestTable] ( C1, C2, C3 )
SELECT *
FROM #tt
Drop table #tt
-- 关闭数据表可自行输入 IDENTITY 的功能, 由系统自行指定
SET IDENTITY_INSERT [TestTable] ON
-- 将数据表的 IDENTITY 设为 11 (下一笔资料为 12)
DBCC CHECKIDENT (TestTable, reseed, 11)
DBCC CHECKIDENT (TestTable, reseed)
用以上语法产生新的 TestTable 就跟旧有的数据表一模一样啰。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2008-03-09 Ajax Toolkit --- UpdatePanelAnimationExtender应用及问题