主键ID是主动编号,我想在记录为10的记录 后面插入一条记录,不知道怎么做?

rayofdawn 2003-05-16 02:29:33
...全文
58 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
happydreamer 2003-05-17
  • 打赏
  • 举报
回复
To rayofdawn ()
不好意思,没把思路写清楚,抱歉,以后注意

To HawaiiLeo(罗马数字)
不行, 不行, 不要这么称呼,水平还很差,其实这个方法也很笨的
看看各位还有什么好的解决方法
iainet 2003-05-17
  • 打赏
  • 举报
回复
如果现在记录是10的话,自动为11

如果小于10,用set identity_insert on,然后insert

如果已经大于10,可以将10后的依次向后移动!就是小黑说的!

select * into #temp from table

update table
set col1=a.col1,col2=a.col2
from (select * from #temp) a
where table.id>10 and a.id=a.id+1
pqc4391 2003-05-17
  • 打赏
  • 举报
回复
有必要吗?SQL里面对记录的具体顺序好象没什么要求,重要是索引建立.
doudouniwan 2003-05-17
  • 打赏
  • 举报
回复
SET IDENTITY_INSERT table on
insert into table (11,...)
SET IDENTITY_INSERT table off
a1n1 2003-05-16
  • 打赏
  • 举报
回复
mark1
HawaiiLeo 2003-05-16
  • 打赏
  • 举报
回复
聚集索引就是你插入数据的时候,数据库会自动给你排序。
如下:其中ID是聚集索引
ID name
1 tony
3 Leo
5 michel

你插入记录(2, 'jeck')
ID name
1 tony
2 jeck
3 Leo
5 michel

HawaiiLeo 2003-05-16
  • 打赏
  • 举报
回复
小黑大侠已经说清楚了。

--CLUSTERED是保证这个索引是聚集索引
CREATE CLUSTERED INDEX indexname on table(column)

SELECT * into #t FROM table

UPDATE table
SET col1=a.col1,col2=a.col2..
FROM
( SELECT * FROM #t) a
WHERE table.id = #t.id + 1 and table.id > 11 --使原11至以后的记录都加一

--然后插入id=11的记录 和原表的最后一条记录
INSERT INTO talbe (col1,col2...) SELECT col1,col2 .. FROM #t ORDER BY id DESC
rayofdawn 2003-05-16
  • 打赏
  • 举报
回复
11原来已有数据了,
怎么“要插入的字段的ID设置为11,
而11以后的ID全加一。”?
CrazyFor 2003-05-16
  • 打赏
  • 举报
回复
如果最大是10,会自动插入11

如果11空缺
可以用
SET IDENTITY_INSERT table on
insert into table (11,...)
SET IDENTITY_INSERT table off

而且你必须把ID字段设置为聚集索引
rayofdawn 2003-05-16
  • 打赏
  • 举报
回复
不大明白。
happydreamer 2003-05-16
  • 打赏
  • 举报
回复
CREATE CLUSTERED INDEX indexname on table(column)


SELECT * into #t FROM table

UPDATE table
SET col1=a.col1,col2=a.col2..
FROM
( SELECT * FROM #t) a
WHERE table.id=#t.id+1 and table.id>11

然后插入id=11的记录 和原表的最后一条记录
INSERT INTO talbe (col1,col2...) SELECT col1,col2 .. FROM #t ORDER BY id DESC


rayofdawn 2003-05-16
  • 打赏
  • 举报
回复
up
rayofdawn 2003-05-16
  • 打赏
  • 举报
回复
HawaiiLeo(罗马数字)
怎么使用聚集索引?
19191919 2003-05-16
  • 打赏
  • 举报
回复
补充:

如果11空缺
可以用
SET IDENTITY_INSERT table on


insert into table(自动编号字段(列)不可缺少,必须列出)
values(11,...)


SET IDENTITY_INSERT table off
rayofdawn 2003-05-16
  • 打赏
  • 举报
回复
问题是11不是空缺的。
psxfghost 2003-05-16
  • 打赏
  • 举报
回复
直接insert就是第十一条了啊!
如果你的字段是自动增长的话
caiyunxia 2003-05-16
  • 打赏
  • 举报
回复
SET IDENTITY_INSERT
允许将显式值插入表的标识列中。

语法
SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }

参数
database

是指定的表所驻留的数据库名称。

owner

是表所有者的名称。

table

是含有标识列的表名。

caiyunxia 2003-05-16
  • 打赏
  • 举报
回复

如果最大是10,会自动插入11

如果11空缺
可以用
SET IDENTITY_INSERT table on
insert into table (11,...)
SET IDENTITY_INSERT table off

HawaiiLeo 2003-05-16
  • 打赏
  • 举报
回复
我认为(水平有限):
能插,但不在记录11,

除非你把ID字段设置为聚集索引,
而且使用触发器,在插入时把要插入的字段的ID设置为11,
而11以后的ID全加一。

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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