T-SQL 一段没什么用的代码
2010-09-06 13:23 Nana's Lich 阅读(510) 评论(0) 编辑 收藏 举报今天做了一些关于SQL Server的测试……折腾几圈下来之后自增量id就惨不忍睹了……于是东搜搜西查查拼凑出来这么一段东西,测试几次没发现严重问题,可以拿来重置表中的自增量id。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | declare @p_tablename nvarchar(128); set @p_tablename = 'Table_1' ; declare @seed numeric (38), @incr numeric (38), @ last numeric (38), @vmax numeric (38), @cname nvarchar(128), @sql nvarchar( max ); declare @tmax table (cmax numeric (38)); select @seed = cast (seed_value as numeric (38)), @incr = cast (increment_value as numeric (38)), @ last = cast (last_value as numeric (38)), @cname = "name" from sys.identity_columns where object_name(object_id) = @p_tablename; set @sql = 'select max("' + @cname + '") from ' + quotename(@p_tablename); insert into @tmax exec (@sql); select @vmax = cmax from @tmax; set @vmax = case when @vmax is null then @seed - @incr else floor((@vmax - @seed) / @incr) * @incr + @seed end ; dbcc checkident(@p_tablename, reseed, @vmax); |
这段代码会寻找指定数据表的自增量id列,然后根据这列中存在的最大数值来设置合适的“下一个”。
我在设计这段代码的时候考虑了两种特殊情况:
一种是列中的最大数值和初始值、增量并不对齐的情况——在这种情况下它会使用最小的有效且对齐的自增量id;
另一种情况则是当表中所有记录都被清空的时候——在元数据中,新建的表的“上一个自增量”的值是NULL,也就是未初始化的意思,但在我的测试中,使用DBCC命令似乎不能设置NULL……所以这里使用了一个迂回的办法,就是用设计上的初始值减去增量,这样当插入下一条记录的时候新产生的自增量值正好是设计上的初始值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器