mysql5资源共享

 找回密码
 立即注册
查看: 71|回复: 6

[MS-SQL Server] 【疑难】SQL SERVER 插入数据时 如何让非自增长的列的值自动增加

[复制链接]

3

主题

17

帖子

45

积分

新手上路

Rank: 1

积分
45
发表于 2019-7-18 16:05:52 | 显示全部楼层 |阅读模式
如题假设有数据库表TableT(col1int,col2varchar)col1是非自增长的但是我希望再插入数据的时候col1可以基于某个特定值(不一定是Max(col1))开始增长
回复

使用道具 举报

7

主题

531

帖子

1089

积分

金牌会员

Rank: 6Rank: 6

积分
1089
发表于 2019-7-18 16:14:55 | 显示全部楼层
identity字段可以指定初始值和步长,如下例子.

  1. createtableT(col1intidentity(1000,5),--初始值=1000,步长=5.
  2. col2varchar(10))

  3. insertintoT(col2)
  4. select'row1'unionall
  5. select'row2'unionall
  6. select'row3'


  7. select*fromT

  8. /*
  9. col1col2
  10. ---------------------
  11. 1000row1
  12. 1005row2
  13. 1010row3

  14. (3行受影响)
  15. */
复制代码
回复

使用道具 举报

3

主题

17

帖子

45

积分

新手上路

Rank: 1

积分
45
 楼主| 发表于 2019-7-18 16:37:15 | 显示全部楼层
引用1楼唐诗三百首的回复:identity字段可以指定初始值和步长,如下例子.自增长列的值总是从最大值开始增长的但是我不希望这样我的意思是col1的最大值是100但是我想从10开始自增长
回复

使用道具 举报

7

主题

531

帖子

1089

积分

金牌会员

Rank: 6Rank: 6

积分
1089
发表于 2019-7-18 16:40:24 | 显示全部楼层
可以用触发器实现.
回复

使用道具 举报

3

主题

17

帖子

45

积分

新手上路

Rank: 1

积分
45
 楼主| 发表于 2019-7-19 14:17:42 | 显示全部楼层
引用3楼唐诗三百首的回复:可以用触发器实现.触发器也不理想我需要处理批量插入触发器好像是在插入完成之后才开始处理数据
回复

使用道具 举报

7

主题

531

帖子

1089

积分

金牌会员

Rank: 6Rank: 6

积分
1089
发表于 2019-7-19 14:36:15 | 显示全部楼层
触发器有INSTEADOF类型,即可代替触发语句的操作.
如仍有问题,建议把需求描述一下,并说明难点在哪.
回复

使用道具 举报

0

主题

46

帖子

110

积分

注册会员

Rank: 2

积分
110
发表于 2019-7-19 16:22:22 | 显示全部楼层
--定义起实值
DECLARE@StartFlagINT=10

--源表
DECLARE@sourceTABLE(sVARCHAR(100))
INSERT@source
SELECT'a'
UNIONSELECT'b'
UNIONSELECT'c'
UNIONSELECT'd'

--目标(用ROW_NUMBER处理自增的问题)
DECLARE@targetTABLE(idINT,sVARCHAR(100))
INSERT@target
selectROW_NUMBER()OVER(ORDERBYs)+@StartFlag,*FROM@source

--查看结果
SELECT*FROM@target
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|mysql5.com Inc. ( 闽ICP备17002856号-1 )

GMT+8, 2019-12-13 16:06 , Processed in 0.050346 second(s), 18 queries .

Powered by MySQL5.com X3.4

© 2003-2019 MySQL5.com.

快速回复 返回顶部 返回列表