SQL SERVER 插入数据时 如何让非自增长的列的值自动增加

狼异族 2019-07-18 04:05:52
如题 假设有数据库表 Table T(col1 int, col2 varchar) col1 是非自增长的 但是我希望再插入数据的时候col1可以基于某个特定值(不一定是Max(col1))开始增长
...全文
441 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
狼异族 2019-08-07
  • 打赏
  • 举报
回复
引用 6 楼 leo_lesley 的回复:
--定义起实值 DECLARE @StartFlag INT = 10 --源表 DECLARE @source TABLE(s VARCHAR(100)) INSERT @source SELECT 'a' UNION SELECT 'b' UNION SELECT 'c' UNION SELECT 'd' --目标(用 ROW_NUMBER 处理 自增的问题) DECLARE @target TABLE(id INT , s VARCHAR(100)) INSERT @target select ROW_NUMBER() OVER(ORDER BY s) + @StartFlag , * FROM @source --查看结果 SELECT * FROM @target
这个很好用
leo_lesley 2019-07-19
  • 打赏
  • 举报
回复
--定义起实值
DECLARE @StartFlag INT = 10

--源表
DECLARE @source TABLE(s VARCHAR(100))
INSERT @source
SELECT 'a'
UNION SELECT 'b'
UNION SELECT 'c'
UNION SELECT 'd'

--目标(用 ROW_NUMBER 处理 自增的问题)
DECLARE @target TABLE(id INT , s VARCHAR(100))
INSERT @target
select ROW_NUMBER() OVER(ORDER BY s) + @StartFlag , * FROM @source

--查看结果
SELECT * FROM @target

唐诗三百首 2019-07-19
  • 打赏
  • 举报
回复
触发器有INSTEAD OF类型, 即可代替触发语句的操作. 如仍有问题, 建议把需求描述一下,并说明难点在哪.
狼异族 2019-07-19
  • 打赏
  • 举报
回复
引用 3 楼 唐诗三百首 的回复:
可以用触发器实现.
触发器也不理想 我需要处理批量插入 触发器好像是在插入完成之后才开始处理数据
唐诗三百首 2019-07-18
  • 打赏
  • 举报
回复
可以用触发器实现.
狼异族 2019-07-18
  • 打赏
  • 举报
回复
引用 1 楼 唐诗三百首 的回复:
identity字段可以指定初始值和步长, 如下例子.
自增长列的值总是从最大值开始增长的 但是我不希望这样 我的意思是 col1的最大值是100 但是我想从10开始自增长
唐诗三百首 2019-07-18
  • 打赏
  • 举报
回复
identity字段可以指定初始值和步长, 如下例子.

create table T(col1 int identity(1000,5), --初始值=1000,步长=5.
               col2 varchar(10)) 

insert into T(col2)
 select 'row1' union all
 select 'row2' union all
 select 'row3'


select * from T

/*
col1        col2
----------- ----------
1000        row1
1005        row2
1010        row3

(3 行受影响)
*/

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧