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

rayofdawn 2003-05-16 02:29:33
...全文
16 点赞 收藏 19
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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全加一。
回复
相关推荐
mysql insert一条记录(事务提交之前)怎样返回创建记录主键id,last_insert_id(),selectkey &&